使用strcat,却一直报错。
一直搞不清楚。求教。
操作系统:win10 x64
编程环境:Visual Studio 2010
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int main(){
char *a=(char *)malloc(200*sizeof(char));
a="aaa";
printf("%s\n",a);
char *b="bbbb";
printf("%s\n",b);
strcat(a,b);
printf("%s\n",a);
free(a);
return 0;
}
用同样的代码复现了一下:
参考一个问答:https://zhidao.baidu.com/question/390378147814693085.html
语句 a = "aaa"; 是将a指向了 只读数据段的“aaa”,因为是只读数据段,所以不允许被修改,而 strcat()函数的原型是:
char strcat ( char destination, const char * source ); 参数destination不是一个只读的数据,是会被改变的,换句话讲,如果这里的strcat操作成功,那么只读数据段内容就会被修改,这显然是不合理的,所以这里会报错。
我实验了以下内容替代main()函数的前两句:
其中不可行的有:
1,
char *a = (char *)malloc(10 * sizeof(char));
a = "aaa";
2,
char *a = "aaa";
3,
char *a;
a = "aaa";
其中可行的有:
1,
char *a = (char *)malloc(10 * sizeof(char));
strcpy(a,"aaa");
2,
char a[] = "aaa";
3,
char a[200] = "aa";
这种问题在不能很好理解内存分配的时候确实很难想明白。因为编译的时候还没有进行分配,不会报错。
#include <stdio.h>
#include <string.h>
int main ()
{
char *a=(char *)malloc(80*sizeof(char));
char *b="bbb";
strcpy (a,"aaa ");
strcat (a,b);
puts (a);
return 0;
}
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。