• fgets()学习


    fgets函数原型:char *fgets(char *s, int n, FILE *stream);
    //我们平时可以这么使用:fgets(str, sizeof(str), stdin);
    其中str为数组首地址,sizeof(str)为数组大小,stdin表示我们从键盘输入数据。

    读取sizeof(srt) - 1 个字符 存到 str 中 ,返回值为字符串str
    遇到换行符结束

    两种情况:

    1,输入字符长度小于 sizeof(srt) - 1, 系统会在末尾加上 ,然后在 加个结束符

    返回字符串长度包含 ,比输入的多1.

    从文件或标准输入接收一串字符,遇到' '时结束,把' '也作为一个字符接收

    2, 输入字符长度大于等于 sizeof(srt) - 1, 系统在末尾加上;

    返回字符串长度为sizeof(srt) - 1

    代码示例:

    #include <stdio.h> #include <string.h> #define N 10 int main() {
      //数组空间10.
    char s1[N]; fgets(s1, N, stdin); cout << "s1所占空间大小为:"; cout << sizeof(s1) << endl; cout <<"s1 为:"; cout << s1; if(s1[3] == ' ') { // 去掉换行符 cout << "有换行符"<<endl; } if (s1[4] == '') { cout << "自动加了结束符"<<endl; } cout << " s1长度:"; cout << strlen(s1) <<endl; return 0
    ; }

    第一种情况


    第二种情况

     附:转载: gets和fgets,scanf  区别

    gets()从stdin流中读取字符串,直至接受到换行符或EOF时停止,并将读取的结果存放在buffer指针所指向的字符数组中。换行符不作为读取串的内容,读取的换行符被转换为null值,并由此来结束字符串。

    ①gets——从标准输入接收一串字符,遇到' '时结束,但不接收' ',把 ' '留存输入缓冲区;把接收的一串字符存储在形式参数指针指向的空间,并在最后自动添加一个''。 

    注意:gets函数可以无限读取,不会判断上限,所以程序员应该确保buffer的空间足够大,以便在执行读操作时不发生溢出。如果溢出,多出来的字符将被写入到堆栈中,这就覆盖了堆栈原先的内容,破坏一个或多个不相关变量的值,为了避免这种情况,我们可以用fgets()来替换gets()(在linux下,程序中用gets(),编译会有warning: the `gets' function is dangerous and should not be used)。

    scanf("%s",&s)与gets(s)函数相似,但不完全相同,使用scanf("%s",&s) 函数输入字符串时存在一个问题,就是如果输入了空格会认为字符串结束,空格后的字符将作为下一个输入项处理,但gets()函数将接收输入的整个字符串直到遇到换行为止。

  • 相关阅读:
    安卓中bitmap16进制计算
    Android Studio打包aar文件
    cmake中的link_directories, LINK_LIBRARIES, target_link_libraries的区别 Linux 下cmake生成SO库的使用实例
    win10 编译好的CPU版本caffe 配置自己的图像分类C++DEMO
    将基于Keras训练的Unet模型通过TensorFlow的C++接口部署
    关于tensorflow中转置卷积使用的理解
    将keras的h5模型转换为tensorflow的pb模型
    win10环境下pyinstaller打包pytorch遇到的问题及解决方案
    计算机网络安全 —— C# 使用谷歌身份验证器(Google Authenticator)(五)
    计算机网络安全 —— 实体鉴别与生成大随机数(四)
  • 原文地址:https://www.cnblogs.com/strivingforever/p/8882402.html
Copyright © 2020-2023  润新知