设fp 是文件指针,str 是一个字符串变量,n是一个整数,向文件中输出字符串的正确格式是( )

设fp 是文件指针,str 是一个字符串变量,n是一个整数,向文件中输出字符串的正确格式是( ),第1张

fputs函数的山念功能是向指定的文件写入一个字符串,其调用形式为肆培: fputs(字符串,文件指针) 其中字符串可以是字符串常量,也可以是字符数逗雹困组名, 或指针变量

摘自百度百科

选择D.从文件fp中读取长度不超过纳掘告n-1的字符洞明串,存入str指向的内存空间。

fgets函数用来从文件中读入字符串。fgets函数的调用形式如下:fgets(str,n,fp);此处,fp是文件指针;str是存放在字符串的起始地址;n是一个int类型变量。函数的功能是从fp所指文件中读入n-1个字符放入str为起始地址的空间内;如果在未读满n-1个字符之时,已读到一个换行符或一个EOF(文件结束标志),则结束本次读 *** 作,读入的字符串中最后包含读到的换行符。因此,确切地说,调用fgets函数时,最多只能读入n-1个字符。读入结束后,系统散早将自动在最后加'\0',并以str作为函数值返回。

这里原因是gets函数不安全,visual studio的后续产品已经不再支持此类函数,可以换成fgets(str1, sizeof(str1), stdin)

第一个参数是,字符存储地址,第二个是最大内存大小,第三个是从哪里读取,stdin是从键盘,也可以是文件指针表示从文件中读取。

其实strcpy出现提示也是不安全的,可以考虑使用strncpy函数。

以下是扩展资料

C语言gets函数,fgets函数的使用

gets从标准输入设备读字符串函数。可以无限读取,不会判断上限庆搭告,以回车结束读取。函数的具体功能如下所示:从stdin流中读取字符串,直至接受到换行符或EOF时停止,并将读取的结果存放在buffer指针所指向的字符数组中。换行符不作为读取串的内容,读取的换行符被转换为‘\0’空字符,并由此来结束字符串。

使用gets函数的时候应注意以下要素:可以无限读取,不会判断上限,所以程序员应该确保buffer的空间足够大,以便在执行读 *** 作时不发生溢出。如果溢出,多出来的字符将被写入到堆栈中,破坏一个或多个不相关变量的值。

这个事实导致gets函数只适用于玩具程序,为了避免这种情况,我们可以用fgets(stdin) 读取标准输入来替换gets()。为了向后兼容,gets删除换行符,gets并不将换行符存入缓冲区。

fgets函数用来从文件中读入字符串。fgets函数的调用形式如下:fgets(str,n,fp);此处,fp是文件指针;str是存放在字符串的起始地址;n是一个int类型变量。函数的功能是从fp所指文件中读入n-1个字符放入str为起始地址的空间内;如果枝隐在未读满n-1个字符之时,已读到一个换行符或一个EOF(文件结束标志),则结束本次读 *** 作,读入的字符串中最后包含读到的换行符。因此,确切地说,调用fgets函数时,最多只能读誉明入n-1个字符。读入结束后,系统将自动在最后加'\0',并以str作为函数值返回。原型是char *fgets(char *s, int n, FILE *stream)

同时注意scanf函数和gets函数混用时的注意事项:

1、gets在scanf前调用,这种调用一般不会出现什么问题,可以正常输入。

2、scanf在gets前调用,这种情况就会出现问题,当输入完scanf中的变量时,运行到gets函数,则不让输入任何字符,出现此问题的原因是gets函数接收了scanf输入完后的回车符,解决的办法是在scanf和gets中间,用getchar函数接收掉回车符,这样就不会出现任何问题了。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/tougao/12233837.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-22
下一篇 2023-05-22

发表评论

登录后才能评论

评论列表(0条)

保存