遇到一个strcpy很尴尬的问题?实在想不通,求解惑

图片说明

图中代码为什么打印不出来name

改成数组的方式定义和初始化name 是没有问题的,实在想不通

编译环境是VC++6.0

求解惑!!!

sizeof指针和sizeof数组是不一样的,sizeof数组是计算数组的大小,sizeof指针是计算指针变量本身的大小,32位下面为4个字节,64位下面为8个字节

 int i;          //sizeof(i) == 4
int ia[5];      //sizeof(ia) == 20
int *pia = ia;  //32位:sizeof(pia) == 4, 64位:sizeof(pia)==8

char* s = "abcde";  //32位:sizeof(s) == 4, 64位:sizeof(s)==8
char sa[]= "abcde"; //sizeof(sa) == 6
char *psa = sa;      //32位:sizeof(psa) == 4, 64位:sizeof(psa)==8

别把指针直接赋初值给字符常量。字符常量肯定不能再被赋值。

一个字符串常量,存放在静态数据区,字符数组是放在栈中

图片说明

这样算全局变量了吧?还是有问题,打印不了,应该跟之前一样是挂在strcpy那儿了

分配内存,用malloc函数,#include
字符串常量在静态存储区,a【4】这样的数组存放在栈中由编译器自动分配释放 ,char*这样要自己去申请内存,或者赋值类似p = “13213”;
就是把字符串常量“123456”的地址赋给了p,不申请系统不知道将读入的东西放到哪里,而且这是崩溃在了scanf那里