无法将结构变量分配给另一个结构变量

时间:2017-10-18 03:25:10

标签: c struct variable-assignment

我无法将一个结构变量(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);
}

3 个答案:

答案 0 :(得分:3)

你可以试试这个。

#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);
}

答案 1 :(得分:0)

Code1中,您无法在C函数外使用R2=R1,否则GCC将报告错误。只需将R2=R1;移到main函数中,然后您的程序就能正常运行。

同样,将R2=&R1;移至main函数。

答案 2 :(得分:0)

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

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

您必须为字符串like this

分配一些内存
struct Record R1 = malloc(sizeof(struct Record) + 10 * sizeof(char));

或者将Name声明为char的指针并像普通

一样分配内存

或者只是避免使用灵活的数组成员,并声明Name

的固定大小