C语言 字符串输出时最后出现乱码

//输入字符串 s1 和 s2,将它们合并为一个字符串//
#include<stdio.h>
#include<string.h>
int main()
{
int a,b,k;
char s1[1000],s2[1000],ex;
gets(s1); gets(s2);
a=strlen(s1);
b=strlen(s2);//计算字符串长度//
char s[a+b];
memcpy(s,s1,a);//把s1放入s中//
for(k=a;k<a+b;k++)
s[k]=s2[k-a];//把s2放入s中//
printf("s=%s\n",s);
return 0;
}
输入:
asdfg
zxc
输出如图,求问原因。

输出出现乱码就是因为字符串结尾并没有结尾符'\0'。
gets函数读入一行字符串时,会在最末尾自动加上'\0'结尾。但是你在for循环内将s2的字符一个个拷贝到s中的时候,循环限定条件只到了s2字符串的'\0'结尾符之前,所以输出乱码了。
将循环条件k<a+b改为k<a+b+1或者k<=a+b就可以将s2字符串最末尾的'\0'结尾符也一同赋值到s字符串的最后,输出就可以正常显示。
温馨提示:答案为网友推荐,仅供参考
第1个回答  2019-05-11
#include<stdio.h>
#include<string.h>
int main()

int a,b,k; 
char s1[1000],s2[1000],ex; 
gets(s1);
gets(s2); 
a=strlen(s1); 
b=strlen(s2);//计算字符串长度// 
char s[a+b+1];
memcpy(s,s1,a);//把s1放入s中// 

for(k=a;k<a+b+1;k++)     

s[k]=s2[k-a];//把s2放入s中//
s[a+b]='\0';
printf("s=%s\n",s);

return 0;

}

本回答被网友采纳
相似回答