gets()、puts()和fgets()、fputs() 的区别。

/*#include<stdio.h>#include<stdlib.h>#defineMAX81int main(void){char name[MAX];char *ptr;printf("请输入姓名:\n");ptr = fgets(name, MAX, stdin);printf("%s? Ah! %s\n", name, ptr);getchar();return 0;}*//*********************************************************************************请输入姓名:qinshihuangqinshihuang? Ah! qinshihuang出现了一个问题:理应问号在上一行,却怕跑到了下一行。问题在于fgets() 把换行符存储到字符串里,这样每次显示字符时就会显示换行符。我们可以使用strchr()来定位和删除换行符。***********************************************************************************//*——————————————————————————— gets() 对于交互式程序非常方便。因为没有字符串预定的长度,所以gets()不知道什么时候 结束。解决办法就是读字符串直到遇到一个换行字符(\n),按回车可以产生这个字符。他 读取换行符之前(不包括换行符)的所有字符,这些字符后添加了一个空字符<\0>,然后把这 个字符串交给调用它的程序。它将读取换行符并将其丢弃,这样下一次读取就会在新的一行开始。 gets() 返回一个指向字符串首地址的指针。 由于gets()不检查目标数组是否能够容纳输入,所以很不安全。的确,几年前就有人注意到 NUIX操作系统中代码使用gets(),于是他们利用这个弱点,用很长的输入覆盖操作系统的代码 ,从而发明了在UNIX网络上传播的“蠕虫(worm)”. ///***fgets()和gets()有三方面不同:***1.fgets()需要第二个参数来说明读入字符数。如果这个参数是n, fgets()就会读取最多n-1个字符 或者读完一个换行符为止,这由二者中最先满足的那个来结束输入。2.如果fgets()读取到换行符,就会把它存到字符串里,而不是像gets()那样丢弃它。3.他还需要第三个参数来说明读哪一个文件。从键盘上读取数据时,可以使用stdin(standard input) 作为参数,这个标识符在stdio.h中定义。 ///***scanf()和gets()*** 主要差别在于他们如何决定字符串的结束。 scanf()基于获取单词。gets()基于获取字符串。 scanf()使两种方法决定书输入结束:1.如果使用%s 格式,那么遇到空白符结束,2.若指定长度%10s,那么读到第10个结束。二者先满足谁都结束输入。 gets()结束输入就一种:遇到换行符。 gets() 更加适用于文本输入。scanf()适用于带有属性的变量输入(也即是有控制符)。 ///***printf()和puts()***puts()输出之后会自动在其后添加一个换行符。 fputs()和puts()fputs() 下需要第二个参数说明要写的文件。使用stdout进行输出显示。gets()丢弃输入里的换行符,puts()为输出添加换行符;fgets()存储输入中的换行符,fputs()不为输出添加换行符。 假定写一个循环,读取一行并把它回显在下一行。char line[80];while(gets(line))puts(line);char line[80];while(fgets(line))fputs(line); 第一个循环中puts()为他添加了换行符,所以每一个数组中的字符都被显示在单独的一行上。 第二个循环中fgets()存储了一个换行符,所以二者输出效果相同。————————————————————————————-*/

版权声明:本文为博主原创文章,,未经博主允许不得转载。

想象困难做出的反应,不是逃避或绕开它们,

gets()、puts()和fgets()、fputs() 的区别。

相关文章:

你感兴趣的文章:

标签云: