首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 嵌入开发 > 单片机 >

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

2014-01-26 
关于scanf和gets的一些细节问题#includestring.hmain(){char istatic char st1[15]shuichar st2[5]

关于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);
}


热点排行