发布网友 发布时间:2022-04-23 10:30
共2个回答
热心网友 时间:2023-10-11 12:26
你定义的char s[]数组长度是10,超过十属于下标越界,当然会出错啦
strlen(s)属于动态获取字符长度,比如你输入5个字符,那么strlen(s)就等于5
热心网友 时间:2023-10-11 12:26
你的字符数组溢出了,所以报错,或者即使不报错,也会数据异常。永远不要使用 gets()。该函数从标准输入读入用户输入的一行文本,它在遇到 EOF 字符或换行字符之前,不会停止读入文本。也就是:gets() 根本不执行边界检查。因此,使用 gets() 总是有可能使任何缓冲区溢出。作为一个替代方法,可以使用方法 fgets()。
给你修改了一下代码,你看看,这样输入很多字符只读取前10个字符,当然你可以把常量BUFSIZE调大点。。。
#define BUFSIZE 10
int main(void)
{
int i, icounter = 0;
char s[BUFSIZE];
puts("enter a string:");
// gets(s);
fgets(s, BUFSIZE, stdin);
for(i = 0; i < BUFSIZE; ++ i)
if(s[i] == 0x20)
++ icounter;
printf("blanks: %d\n", icounter);
return 0;
}