当前位置: 代码迷 >> 单片机 >> 关于scanf和gets的一些细节有关问题
  详细解决方案

关于scanf和gets的一些细节有关问题

热度:106   发布时间:2016-04-28 15:08:08.0
关于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);
}


  相关解决方案