关于scanf和gets的一些细节问题
#include"string.h"
main()
{
char i;
static char st1[15]="shui";
char st2[5];
printf("请输入字符:\n");
//gets(st2);
//scanf("%s",st2);
for(i=0;i<5;i++)
{
scanf("%c",&st2[i]);
}
strcat(st1,st2);
printf("%s",st1);
getch();
}
上面的程序调试时输入字符(少于5个)后,回车后出现乱码,但是如果把
for(i=0;i<5;i++)
{
scanf("%c",&st2[i]);
}换成
gets(st2);则输出正常
求详解,是因为用scanf函数输入的函数没有‘\0’吗?
[解决办法]
正是,scanf 对单个字符赋值,没有作为一个字符串处理,所以没有结尾的\0
你可以输入第五个字符时用alt + 数字小键盘的0来输入\0试试。
最好是把st2定义成6个字符并把最后一个字符初始化为0
[解决办法]
也有可能是因为UNICODE编码,所以这样
[解决办法]
1 你判断不了得输入几个字符,这样从0~4的循环不能满足要求
2 char str[N], C-style字符串需要'\0'做结尾
3 %s 代表输出字符串
给个代码你运行一下就会明白:
#include <stdio.h>
main()
{
char str[4];
str[0] = 'h';
str[1] = 'i';
str[2] = '!';
str[3] = '\0';
printf("%s\n", str);
str[2] = '\0';
str[3] = '!';
printf("%s\n", str);
}