gpt4 book ai didi

C: 无法将文件中的行存储到数组中

转载 作者:太空宇宙 更新时间:2023-11-04 02:24:35 25 4
gpt4 key购买 nike

这是我用来从文本文件读取行并将其存储到“表达式”数组中的一些代码:

//create array for going through the file
char lines[128];
//create array for storing expressions
char **expressions = malloc(128*sizeof(char*));

FILE *file = fopen(argv[1],"r");
int count = 0;
while (fgets(lines,128,file)){
expressions[count] = lines;
printf("expressions[%d] is %s\n",count,expressions[count]);
count++;
}

for (int i = 0; i<count; i++){
printf("%s",expressions[i]);
}

这是这段代码试图读取的文本:

f = g + h - 42;
g = 12 + 23;

我的问题是,虽然它似乎正确地遍历了文件(计数与行数匹配),但最终的打印循环打印了最后一行 g = 12 + 23 两次,而不是两条不同的线。为什么会发生这种情况,我该怎么做才能解决这个问题?

最佳答案

每次读取一行时,将其存储在lines 字符数组中,然后将该数组的地址保存在expressions 的下一个空格中。如果您查看存储在 expressions 中的值,您会发现它们都是相同的。

如果您想保留每一行的副本,则必须有空间来存储每一行​​的副本。如果要处理的行数达到最大值,则可以在程序中分配该内存。否则,您将不得不开始使用动态内存分配。

让我们最多处理 100 行,每行不超过 127 个字符(如上所述):

char expressions[100][128];

int count = 0;
while (fgets(lines,128,file)) {
strcpy(expressions[count], lines);
printf("expressions[%d] is %s\n",count,expressions[count]);
count++;

if (count == 100)
break;
}

关于C: 无法将文件中的行存储到数组中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53135773/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com