使用两个连续的gets对两个字符数组c1与c2进行输入操作。当两个字符数组都是长度为一的字符数组时,第二个gets执行完毕后c1的值会被修改为'\000'。
如果将c1与c2的长度改为大于一的长度,c1在c2被赋值后就不会被修改为'\000'。这是为什么?
![](https://profile-avatar.csdnimg.cn/default.jpg!4)
C语言gets函数的问题
- 写回答
- 好问题 0 提建议
- 追加酬金
- 关注问题
- 邀请回答
-
2条回答 默认 最新
关注
不知道你这个问题是否已经解决, 如果还没有解决的话:- 你可以看下这个问题的回答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:
- gets函数是C语言标准库中的一个字符串输入函数,其原型为char gets(char str),作用是从标准输入流中读取字符,遇到换行符或者文件结束符时停止读取,并将读取到的字符存储在str所指向的字符数组中。
- 定义两个字符数组c1和c2,使用gets分别对它们进行输入操作,代码如下:
char c1[100], c2[100]; gets(c1); gets(c2);
- 当两个字符数组都是长度为一的字符数组时,第二个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的值被修改为了空字符。
- 当c1和c2的长度大于一时,输入缓冲区中剩余的换行符会被第一次调用gets函数读取并丢弃,因此第二次调用gets时不会读取到换行符,也就不会修改c1的值。
如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^本回答被题主选为最佳回答 , 对您是否有帮助呢?解决 无用评论 打赏 举报
悬赏问题
- ¥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