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”。

  • 相关阅读:
    线程的异常捕获与线程池的异常捕获
    设计模式-状态模式
    老王讲自制RPC框架.(四.序列化与反序列化)
    老王讲自制RPC框架.(三.ZOOKEEPER)
    老王讲自制RPC框架.(二.动态代理)
    4
    3
    2
    1
    前言
  • 原文地址:https://www.cnblogs.com/funnylinux/p/3482848.html
Copyright © 2011-2022 走看看