2017-10-18 151 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));