永发信息网

C语言 strcat连接两个char *报错,但两个char []可以,为什么

答案:3  悬赏:50  手机版
解决时间 2021-02-06 01:51
  • 提问者网友:温旧梦泪无声
  • 2021-02-05 17:37
#include<iostream>
#include<string.h>
using namespace std;
bool check(char *str)
{
return true;
}
void main()
{
char *a="a"; //改成char a[]="a";
char *b="b"; //改成char b[]=“b”;
cout<<strcat(a,b)<<endl;
}
最佳答案
  • 五星知识达人网友:山君与见山
  • 2021-02-05 19:16
void main()
{
char *a="a";
char *b="b";
cout<<strcat(a,b)<<endl;
}

你这里a和b都指向常量字符串地址,常量字符串放在常量空间中,而常量字符串是不容许修改的,常量空间是只读的, 所以strcat(a,b)对a指向的常量空间地址进行写操作,当然会运行异常,

而改为a[],则不一样,数组保存在栈空间,栈空间的内存是可以读写的,当然你那样定义还是有可能运行异常,因为越界了,最好给a定义一个足够的空间,
例如char a[3]="a";
全部回答
  • 1楼网友:枭雄戏美人
  • 2021-02-05 21:18
你在连接(strcat)之前用malloc试试。写法:(char *)malloc(sizeof(char)*长度)
  • 2楼网友:行雁书
  • 2021-02-05 19:43
因为第一个是个常量指针,不允许你进行操作,第二个是个数组变量,允许你进行操作。你的两种方法,无论哪一种都存在越界。
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯