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