【发布时间】:2021-02-19 18:13:24
【问题描述】:
我正在尝试逐行读取 .txt 文件,其中每行有 19 个字符长,这是我的代码(我只想使用 fseek 和 fread 来正确理解指针):
int main(int argc, char *argv[]){
FILE *file = fopen(argv[1], "r");
if(file == NULL){
perror("fopen");
return 0;
}
int i = 0;
int j = 0;
char L[20];
while(1){
if(feof(file)){
break;
}
fseek(file, i*20, SEEK_SET);
fread(L,19,sizeof(char),file);
printf("%s\n", L);
i++;
}
fclose(file);
return 0;
}
我认为应该发生的是,我将指向文件的指针移动到循环中每一行的开头,然后移动一行,依此类推。源.txt文件是:
123456789:123456789
perro:guau
gato:miau
vaca:muuu
lobo:auuu
而我从程序中得到的输出是:
123456789:123456789�V
perro:guau �V
gato:miau �V
�V
vaca:muuu �V
�V
lobo:auuu �V
�V
�V
我尝试更改 20s 和 19s,因为我不知道我是否以正确的方式包含字符串字符的结尾,但得到了更糟糕的结果,我们将不胜感激。
【问题讨论】:
-
在将
L视为字符串之前,您在哪里确保它是 0 终止符? -
char L[20] = {0};可能会有所帮助。 -
我认为你的意思是 L[19]。索引是从零开始的。
-
检查
fread()返回值,而不是feof()。 -
如果您正在阅读一行 19 个字符 - 您在每行末尾的
'\n'做什么?或者这包括在你的总数中吗?根据"123456789:123456789"它不是...(指针和fread()不是相关概念)