奇怪的C语言问题

来源:百度知道 编辑:UC知道 时间:2024/06/14 07:51:23
#include<stdio.h>
#include<string.h>
main()
{
char *a = "hhhhhhhh";
char *b = "ggggg" ;
strcpy(a,b) ;
printf("%s\n",a);

}
大家不要把心思浪费在最后一句了,我把最后一句去掉,还是不对,q2752126 写的对,但是我不明白为什么我这么写就不行,还有啊char a[] = "hhhhhhh"; char *p =a ;memcpy(p,b)这样也对,我真是不知道为什么

这问题不奇怪的,但需要对指针的知识有一定了解~~

具体说:
char *a:声明了一个指向char类型的指针a,当然它通常用来指向一个字符数组;

"hhhhhhhh":一个字符串常量。

char *a="hhhhhhhh":该句的结果是使a指向了一块常量区,换言之,在程序中对常量区进行写操作会带来意想不到的结果(通常都是冲突或不可访问,常量编译器优化优化说不定还存到寄存器上了……)。

而执行strcpy(a,b)恰恰对指向常量区的a进行了写操作,
结果便是程序出现"内存访问冲突"的错误。

再说另一种方式:
char a[] = "hhhhhhh":它等价于char a[8]={'h','h','h','h','h','h','h','\0'};即声明了一个字符数组,这个显然是当作变量来处理了。

char *p=a;一个指向char类型的指针p指向了一个字符数组a的首地址。

memcpy(p,b):b是常量,读常量无所谓,把b所指向的内存复制到p所指的内存去,也就是把一个字符串常量复制到了一个字符数组中,读常量写变量,这当然不会出现问题了就。

不知道这样讲楼主可听得明白~~?

#include<stdio.h>
#include<string.h>
void main()
{
char a[] = "hhhhhhhh";
char b[] = "ggggg" ;
strcpy(a,b) ;
printf("%s\n",a);

}

strcpy的参数是char类型数组的名字,你这里是指针,所以错了

你确定你