C语言实现strcat函数,为什么会有这样的输出?

代码:

#import <Foundation/Foundation.h>

void StrCat(char *p ,char *q)

{

while (*p != '\0')

{

p++ ;

}

while (*q != '\0')

{

*p = *q ;

++q ;

++p ;

}

}

int main(int argc, const char * argv[])

{

char a[] = "hello" ;

char b[] = "boy!" ;

StrCat(a, b) ;

printf("%s",a) ;

}
输出结果
helloboy!_\377
b数组的长度小于5个就会出现后面的数字,如果是“world!”就会正常拼接,者是什么原因啊

void StrCat(char *p ,char *q)函数最后需要给p添加字符串结束符'\0',否则就很大概率会出现乱码。
另外,你的char a[] = "hello" ;定义的时候要弄得大一点,否则把b的字符连接到a的后面会发生数组越界访问,这是非法的做法。可以写成:char a[20] = "hello" ; 这样a的大小就够容纳 "helloboy!", "helloworld! "之类 比 "hello" 长的字符串了。
温馨提示:答案为网友推荐,仅供参考
第1个回答  2015-06-29
这是由于你的a数组的长度不够引起的,你定义a的时候没有指定长度,所以他的长度正好为能容纳下"hello"的大小,你指定一下就好了
比如char a[100] = "hello";另外,在strcat函数的第二个循环之后,加上对这整个字符串的结束,*p='\0';,这样应该就不会出现那个问题了本回答被提问者和网友采纳
第2个回答  2015-06-29
这样的做法是错误的,首先我暂且不看你的函数strcat,就看你定义的a,b和用法都错完了,你想把b连接在a的后面,此时你看a数组的有效长度为5,而b为4,那么ab连接在一起后,长度为9,你把长度为9的数组放在长度为5的数组a中显然是错误的,你应该指定数组a,b的长度,比如a[100] = "hello",b[10]="boy!"
第3个回答  2017-08-29
在StrCat(a, b) 函数结尾添加一行
*p = '\0';
相似回答