完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
#include
#include int main(void) { char* p1 = "abcdef"; char* p2 = (char*)malloc(10*sizeof(char)); char* p3; if(p2 == NULL) { printf("malloc failed!"); } p3 = memcpy(p2,p1,10); printf("%s %s %sn",p1,p2,p3); memset(p2,'m',3); printf("%sn",p2); memset(p3,'m',3); printf("%sn",p3); memset(p1,'m',3); printf("%sn",p1); free(p2); p2 = NULL; return 0; } 在VS2008下编译这个程序可以通过,但是运行的时候,会报错该内存不能“written”,程序断在了 memset(p1,'m',3);这句话,我想知道这个函数为什么不能直接作用字符串指针?但是指针p2,p3调用过malloc函数的就可以正常的替换并输出呢? |
|
相关推荐
4个回答
|
|
因为P1没有申请过内存.
|
|
|
|
原子哥,char* p1 = "abcdef"; 这句话难道不是将字符串"abcdef"的首地址传递给了指针p1吗?这样p1指向了字符串,这不算是p1申请内存的过程吗?有点糊涂了,望指点下
|
|
|
|
|
|
|
|
char* p1 = "abcdef";
p1是指针,但是所指的字串"abcdef"(是程序的一部分)被存放在内存的系统区,只允许读操作,不允许写入,否则程序本身就遭到破坏。而p2,p3指向程序申请的内存,它们从内存的“堆”中分配,由程序使用,所以可以写入。 |
|
|
|
只有小组成员才能发言,加入小组>>
请问下图大疆lightbridge2遥控器主板电源芯片型号是什么?
4480 浏览 1 评论
使用常见的二极管、三极管和mos做MCU和模组的电平转换电路,但是模组和MCU无法正常通信,为什么?
348浏览 2评论
为了提高USIM卡电路的可靠性和稳定性,在电路设计中须注意的点有哪些?
354浏览 2评论
381浏览 2评论
372浏览 2评论
426浏览 2评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-26 11:41 , Processed in 1.267649 second(s), Total 84, Slave 68 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号