C语言中gets函数读取字符后,是一个一个分别依次存储到a[0]a[1]a.....还是怎么存的?求大佬赐教,感激!

比如这个
#include <stdio.h>
int main()
{
char s[200];//可供输入的空间大小
int a[10] = { 0 };//给数字0~9存储在各个元素中
int i;
gets(s);
for (i = 0; s[i]; i++)
{
if (s[i] >= '0'&&s[i] <= '9')
a[s[i] - '0']++;
}
for (i = 0; i < 10; i++)
{
if (a[i])
printf("%c: %d\n", '0' + i, a[i]);
}
return 0;
}

gets从标准输入设备读字符串函数,其可以无限读取,不会判断上限,以回车结束读取,所以程序员应该确保buffer的空间足够大,以便在执行读操作时不发生溢出。gets(s);读取字符串时,首字符存放在s[0]中,接着依次存放在s[1],s[2],……中。读取到回车符时,将空字符'\0'存入s数组中,作为字符串结尾符。用此函数时,必须保证s数组足够大。你的程序将字符串读入s中后,再统计其中每个数字字符的多少,最后,输出s中从0到9各数字字符出现的个数。
温馨提示:答案为网友推荐,仅供参考
第1个回答  2019-05-25
gets()以回车为结束符,将输入存到缓冲区,然后在识别到回车后将缓冲区数据移到数组s的地址下,当你的输入数据大于200个时,s数组超限会报错。
如果想要避免由输入超限引起的错误,可以调用以下函数:
fgets(s,200,stdin);
这样的话输入超出200的部分就会被截除,也就不存在数组超限的问题了。
第2个回答  2019-05-25
调用gets(s)函数读入字符串,会将字符串挨个放入s里面。即s[0]表示读入的第零个元素,是s[1]表示第一个元素,以此类推。追问

大佬,是s里的每个元素只会有一个字符的意思吧?

追答

是的,因为这里的s是字符数组,所以每一个元素只可能有一个字符。

本回答被提问者采纳
相似回答