miniArce 发表于 2020-11-30 21:13:00

结构体使用指针赋值失败

#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给拷贝过去了,剩下的还是随机值,实在是想不明白了,求大佬告知

jackz007 发表于 2020-11-30 21:24:49

      第 19 行
      memcpy(x,y,sizeof(x));
      改为
      memcpy(x,y,sizeof(struct stu));

miniArce 发表于 2020-11-30 21:27:44

jackz007 发表于 2020-11-30 21:24
第 19 行

      改为

你好,我想请教一下这是为什么呢?

jackz007 发表于 2020-11-30 21:31:27

本帖最后由 jackz007 于 2020-11-30 21:32 编辑

miniArce 发表于 2020-11-30 21:27
你好,我想请教一下这是为什么呢?

       你需要传递的是一个 struct stu 完整结构的内存空间,而不是一个指针占用的内存空间。

miniArce 发表于 2020-11-30 21:33:14

jackz007 发表于 2020-11-30 21:24
第 19 行

      改为

printf("int =%d", sizeof(int));
printf("b =%d", sizeof(b));

类型和类型定义的变量名的值是相等的,但结构体为什么会有变化呢

倒戈卸甲 发表于 2020-11-30 21:34:42

楼上已解答。因为指针都是四个字节大小,你不是要申请四个字节的内存,而是结构体长度的内存
回帖蹭个鱼币

miniArce 发表于 2020-11-30 21:38:07

jackz007 发表于 2020-11-30 21:31
你需要传递的是一个 struct stu 完整结构的内存空间,而不是一个指针占用的内存空间。

谢谢

miniArce 发表于 2020-11-30 21:38:43

倒戈卸甲 发表于 2020-11-30 21:34
楼上已解答。因为指针都是四个字节大小,你不是要申请四个字节的内存,而是结构体长度的内存
回帖蹭个鱼币

谢谢

倒戈卸甲 发表于 2020-11-30 21:44:58

miniArce 发表于 2020-11-30 21:38
谢谢

你最后的那个问题。你代码中的x不是结构体变量,而是一个结构体指针变量。指针存放地址,长度都是4。你另外定义一个变量struct stu x,x的长度与stu类型一致

小甲鱼的铁粉 发表于 2020-11-30 22:17:44

脸皮厚的我弄个鱼币{:10_250:}

心驰神往 发表于 2020-12-1 09:00:28

+1

hornwong 发表于 2020-12-2 10:53:48

感谢分享!

bhcqzf 发表于 2020-12-10 17:53:51

过来蹭一下鱼币
页: [1]
查看完整版本: 结构体使用指针赋值失败