结构体使用指针赋值失败
#include<stdio.h>#include<string.h>
#include<stdlib.h>
struct stu
{
int id;
int age;
char name;
};
void memcpy_stu();
void memcpy_stu(struct stu *x,struct stu * y)
{
memcpy(x,y,sizeof(x));
}
int main()
{
struct stu a = {1,18,"Over"};
struct stu b;
memcpy_stu(&b,&a);
printf("a=%d %d %s\n",a.id,a.age,a.name);
printf("b=%d %d %s\n", b.id, b.age, b.name);
return 0;
}
结果:a=1 18 Over
b=1 -858993460 烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫 烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫
只把id给拷贝过去了,剩下的还是随机值,实在是想不明白了,求大佬告知 第 19 行
memcpy(x,y,sizeof(x));
改为
memcpy(x,y,sizeof(struct stu)); jackz007 发表于 2020-11-30 21:24
第 19 行
改为
你好,我想请教一下这是为什么呢? 本帖最后由 jackz007 于 2020-11-30 21:32 编辑
miniArce 发表于 2020-11-30 21:27
你好,我想请教一下这是为什么呢?
你需要传递的是一个 struct stu 完整结构的内存空间,而不是一个指针占用的内存空间。 jackz007 发表于 2020-11-30 21:24
第 19 行
改为
printf("int =%d", sizeof(int));
printf("b =%d", sizeof(b));
类型和类型定义的变量名的值是相等的,但结构体为什么会有变化呢 楼上已解答。因为指针都是四个字节大小,你不是要申请四个字节的内存,而是结构体长度的内存
回帖蹭个鱼币 jackz007 发表于 2020-11-30 21:31
你需要传递的是一个 struct stu 完整结构的内存空间,而不是一个指针占用的内存空间。
谢谢 倒戈卸甲 发表于 2020-11-30 21:34
楼上已解答。因为指针都是四个字节大小,你不是要申请四个字节的内存,而是结构体长度的内存
回帖蹭个鱼币
谢谢 miniArce 发表于 2020-11-30 21:38
谢谢
你最后的那个问题。你代码中的x不是结构体变量,而是一个结构体指针变量。指针存放地址,长度都是4。你另外定义一个变量struct stu x,x的长度与stu类型一致 脸皮厚的我弄个鱼币{:10_250:} +1 感谢分享! 过来蹭一下鱼币
页:
[1]