2017-10-18 126 views
-1

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

我厌倦了指针的方式。尽管如此代码是没有得到编译..

代码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

并请,**声明**和** *设置* main()函数中的两个结构变量**。它伤害眼睛.. – YaatSuka

+0

我试过下面, 的#include 结构记录 { \t INT ID; \t char名称[10]; R1 = {1234,“King”},* R2; R2 = &R1; INT主() { \t的printf( “%d%s的\ n” 个,R1.ID,R1.Name); printf(“%d%s \ n”,R2-> ID,R2-> Name); } 仍然不能正常工作 – Bahubali

+0

看到我更新的问题.. – Bahubali

回答

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); 
} 
+0

嗨Z,谢谢..但为什么我的代码1和代码2不工作?你能解释一下吗? – Bahubali

+1

你试过编辑过的代码吗?不,它会*不*工作,您不能分配给'char []'。打印将显示“R2.name”是一个空字符串。 – bnaecker

+0

Hi @ user1031438您的代码不工作,因为您没有正确地声明变量并且在变量类型的范围内。您正在尝试使用R1和R2,就好像它们已经在程序中某处被声明为全局变量一样。 –

0

Code1,您不能使用R2=R1之外的C函数,否则GCC将报告错误。只需将R2=R1;移入main函数,然后程序将正常工作。

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

0

您还没有为该字符串声明任何空间。在一个结构的结束,没有大小的数组被称为flexible array member

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

你要分配一些内存的字符串like this

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