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

(一)intmain(){structstudent{char*name;intscore;}stu,*stu1;stu.name="jim";}//此处的student... (一)
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?
展开
 我来答
爱说真话的小丑
2015-04-17 · TA获得超过943个赞
知道小有建树答主
回答量:866
采纳率:0%
帮助的人:283万
展开全部
问题:(一)中的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];会出错:提示不支持两个参数
这个名有人取了
2015-04-17 · TA获得超过685个赞
知道小有建树答主
回答量:311
采纳率:100%
帮助的人:304万
展开全部
一中只是将name指向“jim”所在的空间,”jim“已经存在了,直接将指针指向他即可,而二中是复制一个”jim“到name所指向的空间,没有初始化当然不行
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
fastfs
2015-04-17 · TA获得超过1423个赞
知道大有可为答主
回答量:2659
采纳率:62%
帮助的人:801万
展开全部
第一个"jim"返回的是一个地址,是正确的。第二个内存分配小了。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式