2017-10-18 16 views
-1

構造体変数(R2 = R1)を別の構造体変数に割り当てることができません。以下のプログラムがコンパイルされない理由と、ある構造変数を他の構造変数に割り当てる最良の方法は何ですか?C構造体 - 構造体変数を他の構造体変数に割り当てることができません

私はポインタの方法で疲れました。それでもコードにコンパイルなっていません。..

CODE1

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

CODE2:

#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()関数の2つの構造変数**それは私が、以下 の#include 構造体レコード { \t int型のIDを試してみました – YaatSuka

+0

...目が痛いです。 \t char name [10]; } R1 = {1234、 "King"}、* R2; R2 = &R1; INTメイン(){ \tのprintf( "%D%S \ n" は、R1.ID、R1.Name)。 \t printf( "%d%s \ n"、R2-> ID、R2-> Name); } まだ動作していません – Bahubali

+0

更新された質問を参照してください.. – Bahubali

答えて

3

あなたはこれを試すことができます。 @piedarが言ったように

#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 

は、次のようにも、あなたはそれ以外の場合はGCCがエラーを報告します、R2=R1外のC関数を使用することはできません、Code1

#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

こんにちはZian、ありがとう。しかし、なぜ私のコード1とコード2は機能していませんか?説明していただけますか? – Bahubali

+1

編集したコードを試しましたか?いいえ、それは動作しません。あなたは 'char []'に代入することはできません。 'R2.name'が空の文字列であることを示す印刷を行います。 – bnaecker

+0

こんにちは@ user1031438変数が正しく宣言されていないため、変数型のスコープ内にコードが存在しません。 R1とR2は、すでにプログラムのどこかでグローバル変数として宣言されているかのように使用しようとしています。 –

0

動作します。 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)); 
関連する問題