fgets():从指定流stream读取一个字符串存储到str指向的内存空间,函数原型如下:
char *fgets( char *str, int n, FILE *stream );
fgets()函数有三个参数str、n和stream:
fgets()函数的返回值类型是一个指向char类型的指针:
C语言标准描述如下:
1. Each of these functions returns its argument if successful.
2. A NULL pointer indicates an error or end-of-file condition.
fgets()函数从指定流stream中读取字符,直至:
以上三种情况任意一个满足,fgets()函数停止读取字符,并在已读取字符末尾添加空字符’\0’,作为字符串结束符。
fgets()函数和gets()函数的工作原理类似,差异如下:
问题思考:为什么fgets()函数会保留换行符’\n’?
比较gets()函数和fgets()函数对换行符’\n’的处理,示例代码如下所示:
int main()
{
char str1[20] = { 0 };
char str2[20] = { 0 };
int len1 = 0;
int len2 = 0;
//
printf("请输入字符串 :\n");
gets(str1);
puts(str1);
printf("Length of str1 = %d\n", strlen(str1));
//
printf("\n");
//
printf("请输入字符串 :\n");
fgets(str2, 20, stdin);
puts(str2);
printf("Length of str2 = %d\n", strlen(str2));
//
printf("\n");
return 0;
}
代码运行结果如下图所示:
代码及运行结果分析:
fgets()函数读文件,文件中行长度小于n,示例代码如下所示:
int main()
{
char str[20] = { 0 };
FILE* fp;
//打开文件
if ((fp = fopen("1.txt", "r")) == NULL)
{
printf("Failed to open file\n");
exit(1);
}
//读第一行
fgets(str, 20, fp);
printf("%s", str);
//读第二行
fgets(str, 20, fp);
printf("%s\n", str);
//关闭文件
fclose(fp);
return 0;
}
代码运行结果如下图所示:
代码及运行结果分析:
fgets()函数读文件,文件中行长度大于n,示例代码如下所示:
int main()
{
char str[20] = { 0 };
int len = 0;
FILE* fp;
//打开文件
if ((fp = fopen("2.txt", "r")) == NULL)
{
printf("Failed to open file\n");
exit(1);
}
//读第一行
fgets(str, 10, fp);
puts(str);
printf("Length of str = %d\n\n", strlen(str));
//读第二行
fgets(str, 10, fp);
puts(str);
printf("Length of str = %d\n\n", strlen(str));
//读第三行
fgets(str, 10, fp);
puts(str);
printf("Length of str = %d\n\n", strlen(str));
//关闭文件
fclose(fp);
return 0;
}
文件内容如下图所示:
代码运行结果如下图所示:
代码及运行结果分析: