我试着逐行读取一个.txt文件,其中每一行都有19个字符长,这是我的代码(我只想使用fread和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我试着改变20年代和19年代,因为我不知道我是否以正确的方式包括字符串的结尾,但是结果更糟,任何帮助都会被接受。
发布于 2020-11-07 05:12:03
"%s"需要字符串。然而,L[]缺乏空字符。若要打印字符数组,请使用"%.*s"fread()返回值,而不是fread()fread()的返回值来知道读取了多少。fread(void * restrict ptr, size_t size, size_t nmemb, FILE * restrict stream);的
示例:
size_t sz = sizeof L / sizeof L[0];
size_t n;
while((n = fread(L,sizeof L[0], sz, file)) > 0) {
printf("<%.*s>\n", (int) n, L);
i++;
fseek(file, i*20, SEEK_SET);
}fread()不是最好的读取行的工具。研究fgets()。
“每一行都有19个字符长,”--> C将一行定义为“每一行由零个或多个字符加上一个终止的新行字符组成。”从C角度来看,您的行包含一个新行,因此总共有20个字符.
https://stackoverflow.com/questions/64724313
复制相似问题