新手遇到一个c的小疑点,求解惑!
新手遇到一个c的小问题,求解惑!!!
这样一个小程序:
char s[10];
int i;
for(i=0;i<10;i++)
scanf("%c",&s[i]);
int m=strlen(s);
printf("%d",m);
这样一个程序最后输出m发觉不是10,我用puts(s)输出后发现,在字符串后面还有一些乱码;但是后来不用字符输入,而是用字符串输入scanf("%s",s);这样就对了!
所以有点不明白为什么会出现这样的问题,难道就是因为字符输入最后没有'\0'的缘故么,但是我已经输入10个字符,怎么还有空间呢!
因为刚学c,所以遇到的麻烦挺多的,麻烦大神解答下!
------解决思路----------------------
for(i=0;i<10;i++) scanf("%c",&s[i]);不会在输入结束后一位加上\0,如同int,double,float一样
scanf("%s",s);在遇到空白符(包括回车、空格、制表符等)停止输入,在后一位加上\0,你说的已经输入10个字符,那已经越界了,C语言不作越界检查,可能有危险
用gets函数更好,可以输入空格,同时fgets还限制长度
这样一个小程序:
char s[10];
int i;
for(i=0;i<10;i++)
scanf("%c",&s[i]);
int m=strlen(s);
printf("%d",m);
这样一个程序最后输出m发觉不是10,我用puts(s)输出后发现,在字符串后面还有一些乱码;但是后来不用字符输入,而是用字符串输入scanf("%s",s);这样就对了!
所以有点不明白为什么会出现这样的问题,难道就是因为字符输入最后没有'\0'的缘故么,但是我已经输入10个字符,怎么还有空间呢!
因为刚学c,所以遇到的麻烦挺多的,麻烦大神解答下!
------解决思路----------------------
for(i=0;i<10;i++) scanf("%c",&s[i]);不会在输入结束后一位加上\0,如同int,double,float一样
scanf("%s",s);在遇到空白符(包括回车、空格、制表符等)停止输入,在后一位加上\0,你说的已经输入10个字符,那已经越界了,C语言不作越界检查,可能有危险
用gets函数更好,可以输入空格,同时fgets还限制长度