(一)int main(){ struct student{ char *name; int score; }stu, *stu1; stu.name = "jim";}//此处的student.name并没有初始化,没有给它用malloc函数分配空间,但是可以赋值成功----------------------------------------------------------------------------------------------------(二)int main(){struct student{char *name; int score; struct student* next;}stu, *stu1;//stu.name = (char*)malloc(sizeof(char)); /*1.结构体成员指针需要初始化*/strcpy_s(stu.name, 5,"jim");}//此处用stucpy_函数时却提示student.name没有初始化,chuan复制未成功问题:(一)中的student.name并未初始化,为什么能赋值成功? (二)偶用strcpy_s函数时有疑问,strcpty(str1,int,str2)中 sizeof(str1)>int&&int>sizeof(str2)才ok?
问题:(一)中的student.name并未初始化,为什么能赋值成功?stu.name = "jim"; "jim"; 是字符串常量,系统自动为他分配了内存并保存这些字符,执行赋值操作是,将这个字符串的首地址复制给 stu.name。 (二)偶用strcpy_s函数时有疑问,strcpty(str1,int,str2)中 sizeof(str1)>int&&int>sizeof(str2)strcpy_s和strcpy()函数的功能几乎是一样的。strcpy函数,就象gets函数一样,它没有方法来保证有效的缓冲区尺寸,所以它只能假定缓冲足够大来容纳要拷贝的字符串。在程序运行时,这将导致不可预料的行为。用strcpy_s就可以避免这些不可预料的行为。这个函数用两个参数、三个参数都可以,只要可以保证缓冲区大小。三个参数时:errno_t strcpy_s(char *strDestination,size_t numberOfElements,const char *strSource);两个参数时:errno_t strcpy_s(char (&strDestination)[size],const char *strSource) 例如:char *str1=NULL;str1=new char[20];char str[7];strcpy_s(str1,20,"hello world");//三个参数strcpy_s(str,"hello");//两个参数但如果:char *str=new char[7];会出错:提示不支持两个参数