scanf()gets()fgets()区别

三者均把一个字符串读到程序中,然而,待读入的数据原先是没有存储空间的,所以程序录入字符串时必须先为字符串预留空间。

比如: char *name;

    scanf("%s", name); 会导致段错误。 为name malloc(。。。)空间可解决此问题。

    或者 直接定义字符串数组 char name[SIZE];

区别:

gets(char *buffer):

  从系统的标准输入获得一个字符串,读取换行符' '之前的所有字符,包括空格,注意:换行符不读入,直接加''结束。

fgets(char *buffer, int size, FILE *f):

  gets()的不足是不检查预留存储区是否能容纳实际输入的数据,多出的字符溢出到相邻的内存区。fgets()改进了该问题,因为他指定了读取个数size。其他与gets()略同。 出于安全考虑,尽量用fgets()。

scanf():

  scanf()再熟悉不过了,不赘述。需要注意的是,如果使用%s格式,字符串读到下一个空白字符(如空格、制表符、换行符等)。所以 如果输入 show all

只能读取到“show”。

原文地址:https://www.cnblogs.com/funnylinux/p/3482848.html