scanf() gets() fgets()使用注意事项

1、scanf()

  遇到‘\n‘停止从输入缓冲区中接收,接收完后‘\n’还存在于缓冲区中。当输入的字符数少于缓冲区大小时,字符后面有自动补上‘\0’,当输入字符大于缓冲区时,也直接拷贝到缓冲中,因此缓冲区大小应注意以免产生段错误。

2、gets()

  当输入的字符串低于缓冲区长度时,以‘\n’‘\0‘结尾,此时缓冲区中什么也没留下;当输入的字符串大于缓冲区长度时,也会全部存入缓冲区中,注意缓冲区大小以免产生段错误,此时缓冲区中什么也没留下。

3、fgets()

  从文件字节流中获取指定长度的字符串并以‘\0’结尾,比如要获取10个字符,实际上获取9个字符加一个‘\0‘

<textarea readonly="readonly" name="code" class="c"> 

#include <stdio.h>

int main()
{
char buff[10];
printf("input string:");
fgets(buff, 10, stdin);
printf("%s\n", buff);
getchar();

return 0;
}

</textarea>

时间: 2024-11-05 20:26:19

scanf() gets() fgets()使用注意事项的相关文章

scanf() & gets() & fgets() 读取字符串的区别

scanf()和gets()读取字符串的区别 主要的差别在于它们如何决定字符串何时结束 scanf()更基于获取单词(get word)而不是获取字符串(get string): gets()会读取所有的字符,直到遇见第一个换行符为止. scanf()使用两种方法决定输入结束. 如果使用%s格式,字符串读到(但不包括)下一个空白字符(比如空格.制表符或换行符) 如果指定了字段宽度,比如%10s,scanf()就会读入10个字符或者直到遇见第一个空白字符,由二者中最先满足的那一个终止输入 注:无论

C语言输入语句scanf与fgets linux下

1.测试使用scanf的一个例子: #include "stdio.h" #include "string.h" int main() { char name[10]; scanf("%s", name); puts(name); return 0; } 编译.调用如下: 可以看到第二次,由于输入的字符串长度,导致Abort 2.同样的一个fgets的例子: #include "stdio.h" #include "

scanf gets fgets区别与联系

scanf( )函数和gets( )函数都可用于输入字符串,但在功能上有区别.若想从键盘上输入字符串"hi hello",则应该使用__gets__函数. gets可以接收空格:而scanf遇到空格.回车和Tab键都会认为输入结束,所有它不能接收空格. char string[15]; gets(string); /*遇到回车认为输入结束*/ scanf("%s",string); /*遇到空格认为输入结束*/ 所以在输入的字符串中包含空格时,应该使用gets输入.

C中scanf/gets/fgets的区别

功能:同样是获取字符串. 区别: scanf 遇到空格/回车/Tab键认为输入结束, 但是空格/回车/Tab键仍会留在输入的缓冲区中.常见的是使用getchar(),处理scanf的后事:如果想要清除残余,可以使用fllush()清除缓存. gets 可以接收空格/回车/Tab键,回车结束输入,但是在Linux中gets是一个危险的函数,因为没有溢出检查:在window中gets是升级版的是安全的. 使用'\n'代替'\0',回车键不会留在输入缓冲区中. fgets  可以完美替代gets,只是

scanf(&quot;%c&quot;, &amp;ch)和scanf(&quot; %c&quot;, &amp;ch)和scanf(&quot;%s&quot;, str)的注意事项

scanf("%c", &ch)和scanf(" %c", &ch): %c会读取回车和空格,所以一定要使用后者,即在%c前面加一个空格. %s用于读取char[]时,会忽略空格和回车,所以不会有这些问题. 原文地址:https://www.cnblogs.com/FengZeng666/p/11448043.html

fgets和scanf的区别

fgets和scanf的区别 1.测试使用scanf的一个例子: [cpp] view plaincopyprint? #include "stdio.h" #include "string.h" int main() { char name[10]; scanf("%s", name); puts(name); return 0; } 编译.调用如下: 可以看到第二次,由于输入的字符串长度,导致Abort 2.同样的一个fgets的例子: [c

c语言中get()函数的原理及返回值

转载自CSDN博客:http://blog.csdn.net/shenglanya/article/details/52213500 首先要记住的一句话就是Never use gets().这是因为gets()函数不检查目标数组是否能够容纳输入,而若想把一个字符串读到程序中,最先要做的事情就是预留存储字符串的空间.所以这很容易导致分配的空间不够大而数组越界,然而gets()函数并不检查这个方面,所以导致的结果就是程序很容易出现漏洞,著名的"蠕虫"病毒的原理就是用很长的数据覆盖原有数据导

C语言的角落——C之很常使用特性(一)

本文搜集整理了一些之前博客中没有提到的,C语言不经常使用的特性,算是对C系列的最后一次补充. 对C语言有兴趣的朋友能够浏览一下,查漏补缺. 变长參数列表 <stdarg.h> 头文件定义了一些宏,当函数參数未知时去获取函数的參数 变量:typedef  va_list 宏: va_start() va_arg() va_end() va_list类型通过stdarg宏定义来訪问一个函数的參数表.參数列表的末尾会用省略号省略 (va_list用来保存va_start,va_end所需信息的一种类

Standard C Episode 6

字符串.字符串是以'\0'结尾的字符序列.C语言字符串在内存中的存储规则:按照串中字符出现的顺序在内存中连续存储,末尾是字符串结束符'\0'. 注:'\0'(查ASCII码表可知'\0'就是0)是表示字符串的字符,它的位置决定了一个字符串中有效字符的个数. 字符串常量.字符串常量在源程序词法记号中属于"文字",它和其他文字"数字.布尔文字.以及字符"一样.但区别是“字符串常量文字代表的是首字符地址”. 注:编译器编译时候会把源程序中重复出现的相同文字只存储一回.多个