开发者社区 问答 正文

请问一个 memcpy 的问题

#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 * 就能成功执行 。

展开
收起
a123456678 2016-06-06 16:24:34 2206 分享 版权
1 条回答
写回答
取消 提交回答
  • char x = "xyz"; 的标准写法是 const char x = "xyz";, 通常用来表示「字符串字面量」,即编译器会把这个字符串放到常量区,因此向其中写入数据会发生错误。

    char[] 是一个数组,被置于自动变量区,因此可以改变它的值。

    strdup 会用 malloc 申请一段内存,并将参数复制进去,因此这个变量位于堆内存上,也是可写的。

    其实在后两句中,会「隐式」地创建一个「字符串字面量」,然后将它复制到一段可写内存上。

    2019-07-17 19:28:55
    赞同 展开评论
问答地址: