请问一个 memcpy 的问题-问答-阿里云开发者社区-阿里云

开发者社区> 问答> 正文

请问一个 memcpy 的问题

2016-06-06 16:24:34 1609 1
#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 * 就能成功执行 。

取消 提交回答
全部回答(1)
  • a123456678
    2019-07-17 19:28:55

    char x = "xyz"; 的标准写法是 const char x = "xyz";, 通常用来表示「字符串字面量」,即编译器会把这个字符串放到常量区,因此向其中写入数据会发生错误。

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

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

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

    0 0
+关注
0
文章
14879
问答
问答排行榜
最热
最新
相关电子书
更多
OceanBase 入门到实战教程
立即下载
阿里云图数据库GDB,加速开启“图智”未来.ppt
立即下载
实时数仓Hologres技术实战一本通2.0版(下)
立即下载