C语言面试经常测试以下问题,哪里有错误:
#include <stdio.h> int main() { char string[100]={'\\0'}; gets(string); printf(”输入的字符串是:%s \ ", string); return 0; }
这个C程序可能有问题,问题在于使用函数gets()。
gets从标准输入设备读字符串函数,可以无限读取,不会判断上限,以回车结束读取。
gets从标准输入设备读字符串函数,
可以无限读取,不会判断上限
,回车后读取。因此,如果输入的字符串超过100个,就不会进行检测,此时就会发生溢出。
使用fgets函数从文件中读取字符串。fgtes函数原型
char *fgets(char *buf, int bufsize, FILE *stream);
一般教材都会解释这个函数的用法,这里就不详细说明了。百度百科的解释如下:百度百科对fgets的解释从文件结构体指针stream中读取数据,每次读取一行。读取的数据保存在buf指向的字符数组中,每次最多读取bufsize-1个字符(bufsize字符赋予“\\0”),如果文件中的行不足bufsize字符,则读取行后结束。如果银行(包括最后一个换行符)的字符数超过bufsize-1,fgets只返回一个不完整的银行,但缓冲区总是以null字符结束,fgets的下一个呼叫将继续阅读银行。如果银行(包括最后一个换行符)的字符数超过bufsize-1,fgets只返回一个不完整的银行,但缓冲区总是以null字符结束,fgets的下一个呼叫将继续阅读银行。函数的成功将返回buf、失败或在文件结尾返回null。因此,我们不能通过feof函数或feror函数直接判断函数是否因错误而终止。
主题测试文章,只做测试使用。发布者:艾迪号,转转请注明出处:https://www.cqaedi.cn/baike/125644.html