C语言结构体成员指针初始化问题

(一)
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?
最新回答
酒爷

2024-05-23 07:01:48

问题:(一)中的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];会出错:提示不支持两个参数
阡陌

2024-05-23 09:08:34

一中只是将name指向“jim”所在的空间,”jim“已经存在了,直接将指针指向他即可,而二中是复制一个”jim“到name所指向的空间,没有初始化当然不行
世界等同你

2024-05-23 04:57:16

第一个"jim"返回的是一个地址,是正确的。第二个内存分配小了。