关于C语言字符串

来源:百度知道 编辑:UC知道 时间:2024/05/09 12:55:34
如果
char str[2];
gets(str);
puts(str);
printf("%c",str[0]);

这时运行,输入abcdefgh,大于5个字符,但是str只有5个字符的空间,
为什么输出却是完整的abcdefgh以及a?

对str[0],str[1]单独赋值,如下:
char str[5],sde[2];
gets(str);
puts(str);
sde[0]=str[0];
sde[1]=str[1];
puts(sde);
getchar();
随便输入什么,为什么得到奇怪的结果?sde到底成了什么?

求教于各位高手

第一点是数组没有结束标志('\0')
第二点是gets()函数将从键盘中输入的字符放在缓冲区,但是str数组中第5个元素没有结束标记('\0'),所以将缓冲区中的所有的字符都打印出来了;
看看改进后的
#include<stdio.h>
void main()
{
char str[5],sde[2],*p;
gets(str);
str[4]='\0';
puts(str);
sde[0]=str[0];
sde[1]=str[1];
p=sde;
p=p+2;
*p='\0';
puts(sde);
getchar();
}