我正在编写一个C代码来逐行读取文件,其中包含字母,CR,LF,'\ 0'。以下是我附上的代码示例。我想只将每行的字母存储到数组中,使得数组中的行数等于文件中的行数,并且列的长度应该不同(取决于第i行中的字符数)。 / p>
#include <stdio.h>
#include <stdlib.h>
int main()
{
char *buffer[100];
char temp[128];
int c,i=0,j=0;
int pos=0;
FILE *file;
file = fopen("input", "r");
if (file) {
while ((c = getc(file)) != EOF){
if ((c>=65 && c<=90) || (c>=97 && c<=122))
temp[pos++]=c;
else if(pos>1) {
temp[pos]='\0';
buffer[i]=temp;
printf ("%s\n",temp);
i++;
pos=0;
}
}
}
fclose(file);
while (j<i){
printf("%s\n",buffer[j]);
j++;
}
}
如果我运行上面的代码,我的所有缓冲区[j]都包含相同的字符串。 任何人都可以帮我解决代码中的错误。
答案 0 :(得分:2)
buffer[]
是指针的数组,在您的while
循环中,您将每个指针指向数组temp[]
buffer[i]=temp; // assign the address of temp to buffer[i]
然后您正在更改temp[]
数组的内容,但地址始终相同。
如果您要将temp
中的数据存储到buffer[]
中的每个位置,您需要分配内存并在那里复制数据。更像是:
buffer[i]=malloc(strlen(temp) + 1);
strcpy(buffer[i], temp);