zoukankan      html  css  js  c++  java
  • 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()函数将接收输入的整个字符串直到遇到换行为止。

  • 相关阅读:
    burp用命令行一键启动出现错误“a java exception has occurred”的解决
    fofa语法
    使用LaZagne获取各种密码
    获取网站ico图标以及使用shodan的http.favicon.hash方法搜同ico站点
    使用nmap-converter.py整理nmap导出的xml记录为xls文件
    使用wafw00f工具识别waf类型
    反射型XSS中的POST型复现
    锐捷统一上网行为管理与审计系统信息泄露漏洞复现(CNVD-2021-14536)
    软件工程 数组
    c语言4
  • 原文地址:https://www.cnblogs.com/strivingforever/p/8882402.html
Copyright © 2011-2022 走看看