c - C 编程中的 fseek 和 fgets 在这里没有正确使用?

标签 c file printf fgets fseek

char * file = malloc(buffer);
assert(file != 0);
char str[20];

snprintf(file, buffer, "%s/%s", newestDirName, fileInDir->d_name);
FILE * input = fopen(file, "r"); // read
fseek(input, 0, SEEK_END);
fgets(str, 20, input);
printf("str = %s \n", str);

我正在读取的文件有最后一行:

ROOM TYPE: END_ROOM

为什么 str 不存储“ROOM TYPE: END_ROOM

我认为 fseek(input, 0, SEEK_END) 获取最后一行,光标从最后一行的最左边位置开始。这是错误的吗?

我认为fgets(str, 20, input)从输入中获取20个字符并将其放入str中,这是一个char *变量.

但是当我打印 str 时,我得到了 str 值的乱码:

str = ▒▒As=   

最佳答案

如果你需要使用fgets,你可以尝试这个。但是,没有什么可以保证一行中的字符数不超过20个字符,特别是如果每​​行的字符数是可变的。

char str[20]={0};
FILE * input = fopen("file.txt", "r"); // read
if(input)
{
    char *ptr;/*Warns you if you have reached the end of the file or some error*/
    do 
    {   
        ptr=fgets(str, 20, input);
    } while(ptr);
    if(str)
        printf("str = %s \n", str);
    fclose(input);
}

关于c - C 编程中的 fseek 和 fgets 在这里没有正确使用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43970011/

相关文章:

xslt - xsl 引用外部 xsl 文件

尝试使用指针打印值时 c 程序失败

c++ - short 没有被正确打印 c++

c - 如何在运行时查找所有全局变量?

C 错误处理最佳实践 - 使用 exit()?

java - 如何从 ListView 中选择特定文件

c++ - 文件或目录 _findfirst C++

java - 我可以在java中使用printf而不移动到新行吗

c - 如何在 while 循环内重置 do while 循环?

c 原始套接字和 64 位问题