C语言memcpy 断错误

来源:岁月联盟 编辑:猪蛋儿 时间:2011-12-14

在LINUX下写类似如下程序时,出现段错误


int main() 

         char *a="11111111"; 
         char  *b ="2222222"; 
         printf("before a:%s b:%s/n",a,b); 
         memcpy(a,b,8); 
         printf("after    a:%s b:%s/n",a,b); 
         return 0; 

而在UNIX下,能正常编译。

原因:

在unix上,系统对内存管的比较松,而在linux下,指针a 可能是指向了一个只读的内存。


解决办法:


int main() 

        char *a; 
        char *b; 
        char str1[]="00000000"; 
        char str2[]="11111111"; 
        a=(char *)malloc(8); 
        b=(char *)malloc(8); 
        memcpy(a,str1,8); 
        memcpy(b,str2,8); 
        printf("after a:%s b:%s/n",a,b); 
        return 0; 
}    

这样就不会出现段错误了,因为malloc出来的地址都是可以正常访问的。

摘自 SdustLiYang的专栏

图片内容