c - 将文件逐行拆分为单词数组
问题描述
我正在尝试编写一个将C switch 语句转换为汇编的程序。我的第一步是从文件中读取并逐行将行拆分为单词数组。然后通过其位置处理单词。
例如:你好世界;你好世界;
将变成: 迭代 1: arr[0]= Hello, arr[1]= World 迭代 2: arr[0]= hello, arr[1]= world
出于某种原因,当我尝试打印我的 arr 内容时我得到空值,我不知道如何解决它。将不胜感激一些帮助。谢谢!
这是我的代码:
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int main() {
FILE *fptrr;
char * line = NULL;
size_t len = 0;
ssize_t read;
fptrr = fopen("switch.c", "r");
if (fptrr == NULL)
exit(EXIT_FAILURE);
size_t num = 100;
char **arr = malloc(num * sizeof(char *));
while ((read = getline(&line, &len, fptrr)) != -1){
char* token = strtok(line, " ;");
int i = 0;
while (token != NULL) {
arr[i] = malloc(100);
strcpy(arr[i], token);
i++;
token = strtok(NULL, " ;");
printf("%s ",arr[i]);
}
}
}
这是我要阅读的文件:
long switch1(long *p1, long *p2, long action)
{
long result = 0;
switch(action) {
case 27:
*p2 = *p1;
result = *p2;
break;
case 25:
*p1 += *p2;
result = *p1;
break;
case 29:
case 30:
*p1 -= 59;
*p2 -= *p1;
break;
case 23:
*p1 += 60;
case 21:
result = *p2;
result *= result;
break;
case 31:
result = *p2;
result >>= *p1;
break;
default:
result = 12;
result <<= 3;
}
return result;
}
这是我现在得到的:
(null) (null) (null) (null) (null) (null) (null) switch1(long switch1(long *p1, long *p2, long result = {
= 27:
= 0
= *p1
= *p2
*p2 25:
*p2
+= *p2
= *p1
*p1 29:
*p1 30:
*p1
-= 59
-= *p1
*p1 23:
*p1
+= 60 21:
60
= *p2
*= result
result 31:
result
= *p2
>>= *p1
*p1
= 12
<<= <<= 3
result
解决方案
在以下行中,您只为指针分配了内存:
char **arr = malloc(num * sizeof(char *));
您必须为每个令牌分配内存,然后复制整个令牌:
代替 :
arr[i] = token;
利用:
arr[i] = malloc(100); strcpy(arr[i], token);
注意:以上代码片段的目的是演示问题,而不是展示良好的编程习惯。例如,您必须处理内存释放、检查溢出等。
推荐阅读
- php - 为我的属性表创建照片模型
- python - multithreading for loop not working in Python with no errors
- javascript - 一个框架。单击另一个实体时如何使实体出现
- c++ - 双向迭代器实现
- excel - 可以动态调用 Property Let/Get 还是每个 Property 都需要自己的函数?
- javascript - 获得 omdb api 前 100 部电影?
- canvas - Konva 画布中的 SVG 动画
- pandas - 如何在 Pandas 中使用 to_csv 并且索引位于不同位置?
- ios - Xcode 不允许我编辑文件,因为它们被“锁定”
- python - 如何通过for循环将值附加到数组