为什么执行到memcpy,CMD就崩溃

C语言 码拜 9年前 (2015-09-21) 2461次浏览
 

一执行到memcpy,CMD就崩溃了,如果把a设置成char a[6]就没问题,但为什么char *a=”abcde”这种方式就不行呢

  char *a="abcde";
  char *b="12345";
  memcpy(a,b,2);
    printf("*a=%c,*b=%c",*a,*b);
#1

40分

char *a=”abcde”这种写法数据在常量静态区写入非法
#2
楼上正解,但是这其实与编译器有关,你的程序也就能在Turbo C下正常运行。
#3
看看程序内存组成,有些是const不可写,只能读

#4
#pragma comment(linker,"/SECTION:.rdata,RW")
//加这句可以让常量区可写,后果自负!
#5
常量区不可写

可以这样写:

	char a[]="abcde";
 
	char *b="12345";
 
	memcpy(a,b,2);
 
    printf("*a=%c,*b=%c",*a,*b);

上面的a中字符串是在栈上分配的,所以可以


CodeBye 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明为什么执行到memcpy,CMD就崩溃
喜欢 (0)
[1034331897@qq.com]
分享 (0)