指针指向字符串和数组储存字符串区别

    #include <stdio.h>  

    void main()
    {
        char *p = NULL,*str = "aafg" ,aa[10] = "abc";
        p = strcpy(str,aa);
        printf("%s/n",p );
    }

定义了一个指向字符串的指针,str是在栈上分配的变量,储存的地址对应的是在常量区中分配的空间。"aafg"是存储在常量区里面,
是不能改变的。char *str 其实存在一种 const char *类型的隐式转换,而strcpy要做的改变常量,所以程序编译的时候没错,运行的
时候就出错了。
    #include <stdio.h>
    void main()
    {
        char *p = NULL,str[20] = "aafg" ,aa[10] = "abc";
        p = strcpy(str,aa);
        printf("%s/n",p );
    }

这个程序和上面的程序的区别就是在于字符串存储的位置,定义了一个数组,在栈上分配空间。就是修改也是普通的数组赋值。
所以程序不会报错。

标签:C/C++