m0_74071811 2023-06-10 14:44 采纳率: 83.3%
浏览 11
已结题

C语言gets函数的问题

使用两个连续的gets对两个字符数组c1与c2进行输入操作。当两个字符数组都是长度为一的字符数组时,第二个gets执行完毕后c1的值会被修改为'\000'。
如果将c1与c2的长度改为大于一的长度,c1在c2被赋值后就不会被修改为'\000'。这是为什么?

img

img

  • 写回答

2条回答 默认 最新

  • CSDN-Ada助手 CSDN-AI 官方账号 2023-06-12 23:55
    关注
    不知道你这个问题是否已经解决, 如果还没有解决的话:
    • 你可以看下这个问题的回答https://ask.csdn.net/questions/7739805
    • 除此之外, 这篇博客: C语言:使用字符串处理函数中的  2.gets函数——输入字符串的函数 部分也许能够解决你的问题, 你可以仔细阅读以下内容或者直接跳转源博客中阅读:

      其一般形式为:

      gets(char str[])

         1.从终端输入一个字符串到字符数组,并得到一个函数值。

         2.该函数值是字符数组的起始地址。

      示例代码:

      #include<stdio.h>
      int main()
      {
      	char str[10];
      	gets(str);
      	puts(str);
      	return 0;
      }
    • 以下回答来自chatgpt:
      1. gets函数是C语言标准库中的一个字符串输入函数,其原型为char gets(char str),作用是从标准输入流中读取字符,遇到换行符或者文件结束符时停止读取,并将读取到的字符存储在str所指向的字符数组中。
      2. 定义两个字符数组c1和c2,使用gets分别对它们进行输入操作,代码如下:
      char c1[100], c2[100];
      gets(c1);
      gets(c2);
      
      1. 当两个字符数组都是长度为一的字符数组时,第二个gets会将输入的第一个字符存储到c2中,而输入的换行符则会留在输入缓冲区中,因此在第二次调用gets函数时,它会读取到这个换行符,并将其存储到c1中,导致c1的值被修改为'\000'。可以使用下面的代码来验证:
      char c1[1], c2[1];
      gets(c1);
      gets(c2);
      printf("c1: %c, c2: %c\n", c1[0], c2[0]);
      

      输入字符a和字符b,输出结果为"c1: , c2: b",可以看到c1的值被修改为了空字符。

      1. 当c1和c2的长度大于一时,输入缓冲区中剩余的换行符会被第一次调用gets函数读取并丢弃,因此第二次调用gets时不会读取到换行符,也就不会修改c1的值。

    如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 6月23日
  • 已采纳回答 6月15日
  • 创建了问题 6月10日

悬赏问题

  • ¥15 from seleniumwire import webdriver 在抓取http://链接的时候会自动转https://这个怎么解决
  • ¥15 hive直连数据库模式插入mysql表数据失败(相关搜索:数据库)
  • ¥30 不会,学习,有偿解答
  • ¥15 SQL查询语句报错(检查)
  • ¥15 此表中公式应该怎么写
  • ¥15 求HI-TECH PICC 9.50 PL3安装包
  • ¥15 下载ctorch报错,求解
  • ¥15 如何入门学习c语言,单片机
  • ¥15 idea 编辑语言的选择
  • ¥15 Windows下部署Asmjit