qslife
2016-08-10 14:19
采纳率: 100%
浏览 3.5k
已采纳

c语言中,为什么puts函数输出的字符串后有乱码?

输入一个4位的数字(1,2,3,4),存在字符串s1[4]中。
输入一个要插入的字符(W),存在字符c中。
s2[7]用来存储c插入s1后的结果,结果应该为“1W2W3W4”。
为什么puts(s2)输入的有乱码,我用的是win7+C-Free4.0。
代码如下:
#include
int main()
{
char s1[4],s2[7],c;
int i,j;
printf("请输入s1:");
gets(s1);
printf("*****s1输入成功*****\n");
puts(s1);
printf("\n");
printf("请输入要插入的字符:");
scanf("%c",&c);
fflush(stdin);
printf("*****要插入的字符c输入成功*****\n");
printf("%c\n",c);
printf("\n");

for(i=0,j=0;j<=6;i++,j++)
{
s2[j]=s1[i];
s2[j+1]=c;
j++;
}
printf("*****c字符插入s2字符串成功*****\n");
for(i=0;i<7;i++)
{
printf("%c",s2[i]);
}
printf("\n");
for(i=0;i<7;i++)
{
printf("s2[%d]=%c ",i,s2[i]);
}
printf("\nputs()输出:");
puts(s2);
return 0;
}
结果如下:
图片说明

  • 写回答
  • 好问题 提建议
  • 关注问题
  • 收藏
  • 邀请回答

3条回答 默认 最新

  • StopZone 2016-08-10 15:08
    已采纳

    puts(char *) 的输出格式是遇到'\0' 结束输出,s2所指向的字符串末尾没有'\0',所以就把非法内存的东西输出出来了。

    已采纳该答案
    评论
    解决 4 无用
    打赏 举报
  • weixian52034 2016-08-11 00:51

    可以自己在字符串的最后追加个‘\0’结束!可以解决该问题。

    评论
    解决 1 无用
    打赏 举报
  • qslife 2016-08-10 15:23

    把这行的“for(i=0,j=0;j<=6;i++,j++)”中的“j<=6”改为“i<=4”,把s1[4]='\0'复制过去,s2就有了字符串结束标记了,不会再非法输出内存了。
    修改后的:
    #include
    int main()
    {
    char s1[4],s2[7],c;
    int i,j;
    printf("请输入s1:");
    gets(s1);
    printf("*****s1输入成功*****\n");
    puts(s1);
    printf("\n");
    printf("请输入要插入的字符:");
    scanf("%c",&c);
    fflush(stdin);
    printf("*****要插入的字符c输入成功*****\n");
    printf("%c\n",c);
    printf("\n");

    for(i=0,j=0;i<=4;i++,j++)
    {
    s2[j]=s1[i];
    s2[j+1]=c;
    j++;
    }
    printf("*****c字符插入s2字符串成功*****\n");
    for(i=0;i<7;i++)
    {
    printf("%c",s2[i]);
    }
    printf("\n");
    for(i=0;i<7;i++)
    {
    printf("s2[%d]=%c ",i,s2[i]);
    }
    printf("\nputs()输出:");
    puts(s2);
    return 0;
    }
    图片说明

    评论
    解决 无用
    打赏 举报

相关推荐 更多相似问题