C语言 不能通过重复使用fgets读取文件



在此代码中,我试图从文件中读取数据(每行30个字符),内容为:

hello world !学习编程!

123456789123456789123456789123

用来读取这个文件的代码是:

#include<stdio.h>
#include<stddef.h>
int main(void)
{
FILE *fptr = fopen("n","r");
char buff[30];
char *buff_ptr = buff;
size_t buff_size=30;
size_t character_count=0;
buff_ptr = fgets(buff,buff_size,fptr);
printf("%sn",buff_ptr);
fgets(buff,buff_size,fptr);
printf("%sn",buff);
return 0;
}

为什么第二个fgets没有输出?

你需要扩大你正在读取数据的字符数组

fgets的第一次调用恰好读取在新的行字符'n'之前出现在文件的第一个记录中的29个字符(另外一个字符为终止零字符''保留)。第二次调用读取这个新的行字符。

选自C标准(7.21.7.2 fgets函数)

2 fgets函数读取的数据最多少于1由n指定的字符从流指向的流进入在a之后不读取其他字符换行符(保留)或在文件结束符之后。一个空在读入最后一个字符后立即写入字符数组。

声明数组,例如

char buff[100];

和调用fgetslike

fgets( buff, sizeof( buff ), fptr );

下面是一个演示程序,它显示了包含30个元素的数组不足以读取整个第一条记录。即第一条记录包含超过30个字符。

#include <stdio.h>
#include <string.h>
int main(void) 
{
const char record[] = "hello world! Learning to code!n";

printf( "strlen( record ) = %zun", strlen( record ) );

return 0;
}

程序输出为

strlen( record ) = 31

相关内容

  • 没有找到相关文章

最新更新