下面程序的运行结果是()
#include <stdio.h>
#include <string.h>
void main()
{
char * p1, *p2, str[50] = "abc";
p1 = "abc";
p2 = "abc;
strcpy(str+1, strcat(p1, p2));
printf(%s\n",str);
}
这道题答案是编译输出错误,但答案的结果是 _p1 指向的是常量区,所以编译错误。_
而我的理解是:
p1 p2 都是定义了俩个指针变量,存储在栈区
“abc”, 是字符常量,存储在常量区,并且不可更改
str[50] 是在栈区开辟了一片名字叫做 str 的空间,大小是50,然后将“abc”拷贝了一份到栈区
p1 p2 都指向常量区的字符串“abc”的首地址
"abc" 字符串的本身就代表的是它的首地址
strcpy 和 strcat 的参数都是要拷贝的首地址
strcpy(p1,p2) 将p2的地址拷贝到p1中
但是
p1, p2 都指向的是地址啊,为啥有错误呢?!*&%¥#@~