【问题标题】:Unable to assign structure variable to another structure variable无法将结构变量分配给另一个结构变量
【发布时间】:2018-03-29 20:40:36
【问题描述】:

我无法将一个结构变量 (R2 = R1) 分配给另一个结构变量。请帮助我理解,为什么以下程序没有被编译,以及将一个结构变量分配给另一个结构变量的最佳方法是什么?

我厌倦了指针的方式。仍然没有编译代码...

代码1

#include<stdio.h>

struct Record
{
    int ID;
    char Name[];
} R1 = {1234, "King"}, R2;

R2 = R1;

int main()
{
    printf("%d   %s \n", R1.ID, R1.Name);
    printf("%d   %s \n", R2.ID, R2.Name);
}

代码2:

#include<stdio.h>

struct Record
{
    int ID;
    char Name[];
} R1 = {1234, "King"}, *R2;

R2 = &R1;

int main()
{

    printf("%d   %s \n", R1.ID, R1.Name);
    printf("%d   %s \n", R2->ID, R2->Name);
}

【问题讨论】:

  • 请在main() 函数中声明设置两个结构变量in。它伤害了眼睛..
  • 我在下面试过了,#include struct Record { int ID;字符名称[10]; }R1={1234,"国王"},*R2; R2=&R1; int main() { printf("%d %s \n",R1.ID,R1.Name); printf("%d %s \n",R2->ID,R2->名称); } 还是不行
  • 查看我更新的问题..

标签: c struct variable-assignment


【解决方案1】:

您没有为字符串保留任何空间。结构体末尾无大小的数组称为flexible array member

struct Record
{
    int ID;
    char Name[];
}

你必须为字符串like this分配一些内存

struct Record R1 = malloc(sizeof(struct Record) + 10 * sizeof(char));

或者将Name 声明为char*,然后像平常一样分配内存并复制字符串。使用完记得删除指针

或者只是避免灵活的数组成员并为Name声明一个固定大小

【讨论】:

    【解决方案2】:

    你可以试试这个。

    #include <stdio.h>
    #include <string.h>
    typedef struct _Record
    {
        int ID;
        char Name[10];
    } Record;
    
    int main()
    {
        Record R1, R2;
        R1.ID = 1234;
        strcpy(R1.Name, "king");
        R2 = R1;
        printf("%d   %s \n",R1.ID,R1.Name);
        printf("%d   %s \n",R2.ID,R2.Name);
    }
    
    >>>
    1234 king
    1234 king
    

    正如@piedar 所说,以下也有效

    #include <stdio.h>
    #include <string.h>
    struct _Record
    {
        int ID;
        char *Name;
    } R1={1234,"king"}, R2;
    
    int main()
    {
        R2 = R1;
        printf("%d   %s \n",R1.ID,R1.Name);
        printf("%d   %s \n",R2.ID,R2.Name);
    }
    

    【讨论】:

    • 嗨 Zian,谢谢..但是为什么我的代码 1 和代码 2 不起作用?你能解释一下吗?
    • 你试过你编辑的代码了吗?不,它不起作用,您不能分配给char[]。打印将显示 R2.name 是一个空字符串。
    • 嗨@user1031438,您的代码无法正常工作,因为您没有正确声明变量并且在具有变量类型的范围内。您正在尝试使用 R1 和 R2,就好像它们已经在程序中的某个地方声明为全局变量一样。
    • @bnaecker 我修好了。顺便说一句,你能解释一下为什么在这里使用char Name[] 不起作用。
    • @ZianLai 那是一个数组。据我所知,您不能分配给数组。您必须使用char *name,它可以指向任何地方,包括现有的char[] 数组。
    【解决方案3】:

    Code1中,不能在C函数之外使用R2=R1,否则GCC会报错。只需将R2=R1; 移动到main 函数中,您的程序就可以正常运行了。

    同样,将R2=&amp;R1; 移动到main 函数中。

    【讨论】:

      猜你喜欢
      • 2021-04-04
      • 2014-08-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-03-15
      • 1970-01-01
      • 2018-09-29
      • 2021-03-19
      相关资源
      最近更新 更多