为什么这段代码的输出是内存中的一些随机单词?
void conc()
{
FILE *source = fopen("c.txt", "r+");
if(!source)
{
printf("Ficheiro não encontrado");
return;
}
short i = 0;
while(fgetc(source) != EOF)
i++;
char tmp_str[i];
fgets(tmp_str, i, source);
fclose(source);
printf("%s", tmp_str);
}
我想这应该会给我文件的内容。
最佳答案
因为在您使用 fgetc()
遍历文件后,位置指示器位于文件末尾。 fgets()
没有什么可读的。您需要使用 rewind(source);
重置它,使其指向开头。
顺便说一句,不要使用fgetc()
遍历文件,这是一个非常丑陋的解决方案。使用 fseek()
和 ftell()
或 lseek()
而不是获取文件的大小:
fseek(source, SEEK_END, 0);
long size = ftell(source);
fseek(source, SEEK_SET, 0); // or rewind(source);
备选方案:
off_t size = lseek(source, SEEK_END, 0);
rewind(source);
关于c - 从文件中获取字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17343308/