求助,C语言,用指针将两个字符串连在一起哪里出错了
/* Note:Your choice is C IDE */
#include "stdio.h"
void main()
{
char s[]="hello!";
char a[]="now is the time";
char *ps=s;
char *pa=a;
while(*ps!='\0')
ps++;
while(*pa!='\0')
*(ps++)=*(pa++);
*ps='\0';
printf("%s",s);
}
[解决办法]
char s[] = "hello!";数组越界了
可以改成char s[30] = "hello!";
#include "stdio.h"
void main()
{
char s[]="hello!"; //这样写错,但是系统就会默认分配sizeof("hello!")的字节数
//的内存空间给到 char数组 s的,
char a[]="now is the time";
char *ps=s;
char *pa=a;
while(*ps!='\0') //这个时候 相当于已经访问到 s结尾处的字节'\0'了,后面已经没有内存空间
ps++;
while(*pa!='\0')
*(ps++)=*(pa++); //这个时候继续做ps++操作并给它赋值,肯定越界,访问内存出错
*ps='\0';
printf("%s",s);
}