zoukankan      html  css  js  c++  java
  • 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”。

  • 相关阅读:
    问答
    正在设计taijilang的解析器,真可谓尸横遍地
    因为这些理由而坚持用grunt?其实它们都不成立。
    开始设计taijijs
    从grunt转到gulp
    google 索引
    :: operator
    用coffeescript写构造函数
    jade与angular.js
    angular.js 资料收集
  • 原文地址:https://www.cnblogs.com/funnylinux/p/3482848.html
Copyright © 2011-2022 走看看