#include<stdio.h>
#include<stdlib.h>
#include<string.h>
main()
{
char* src = "abc123";
char* dest = "test";// 这样会发生 segmentation fault (core dumped)
//char dest[10] = "test";//success 这样成功执行
//char* dest = strdup("test");//success 这样成功执行
memcpy(dest, src, strlen(src)+1);
printf(" %s\n", dest);
}
//关于 memcpy 复制字符串时,memcpy(dest, src, strlen(src)+1) , 目标字符串dest 类型 char xxx , char xxx[] 有什么不同 , char 会发生 segmentation fault (core dumped) , 而 char xxx[] 不会 , 但 strdup 后的 char * 就能成功执行 。
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
char x = "xyz"; 的标准写法是 const char x = "xyz";, 通常用来表示「字符串字面量」,即编译器会把这个字符串放到常量区,因此向其中写入数据会发生错误。
char[] 是一个数组,被置于自动变量区,因此可以改变它的值。
strdup 会用 malloc 申请一段内存,并将参数复制进去,因此这个变量位于堆内存上,也是可写的。
其实在后两句中,会「隐式」地创建一个「字符串字面量」,然后将它复制到一段可写内存上。