在此代码中,我试图从文件中读取数据(每行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];
和调用fgets
like
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