2017-10-18 4 views
-1

Je ne peux pas affecter une variable de structure (R2 = R1) à une autre variable de structure. Aidez-moi à comprendre pourquoi le programme suivant n'est pas compilé et quelle est la meilleure façon d'assigner une variable de structure à une autre?Structure C - Impossible d'affecter une variable de structure à une autre variable de structure

Je me suis fatigué avec des moyens Pointers. Code encore ne se compilé ..

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

Et s'il vous plaît, ** et ** ** déclarer set * * les deux variables struct ** dans ** la fonction 'main()'. Ça fait mal aux yeux .. Je – YaatSuka

+0

essayé ci-dessous, #include struct Enregistrez { \t ID int; \t om Nom [10]; } R1 = {1234, "King"}, * R2; R2 = &R1; main() {int \t printf ("% d% s \ n", R1.ID, R1.Name); Printf ("% d% s \ n", R2-> ID, R2-> Nom); } Toujours pas fonctionnant – Bahubali

+0

Voir ma question mise à jour .. – Bahubali

Répondre

3

Vous pouvez essayer.

#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 

Comme @piedar dit ce qui suit fonctionne aussi

#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

Salut Zian, merci..Mais pourquoi mon code 1 et mon code 2 ne fonctionnent pas? Pourriez-vous s'il vous plaît expliquer? – Bahubali

+1

Avez-vous essayé votre code édité? Non, cela ne fonctionnera pas *, vous ne pouvez pas assigner un 'char []'. Impression qui vous montrera que 'R2.name' est une chaîne vide. – bnaecker

+0

Bonjour @ utilisateur1031438 votre code ne fonctionne pas parce que vous ne déclarez pas la variable correctement et dans une portée avec le type de variable. Vous essayez d'utiliser R1 et R2 comme s'ils étaient déjà déclarés quelque part dans le programme en tant que variable globale. –

0

En Code1, vous ne pouvez pas utiliser les fonctions en dehors R2=R1 C, sinon GCC signale les erreurs. Il suffit de déplacer R2=R1; dans la fonction main et votre programme fonctionnera normalement. De même, déplacez R2=&R1; dans la fonction main.

0

Vous n'avez déclaré aucun espace pour la chaîne. Un tableau sans avoir à la fin d'une struct est appelée flexible array member

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

Vous devez allouer de la mémoire pour la chaîne like this

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