2010-08-30 5 views
1

Je suis en train d'accéder au asd7 élément dans la structure intime, voici mon code:Accès des éléments de structure en C

#include <stdio.h> 

int main() 
{ 
struct asd 
{ 
    int asd; 
    struct asd1 
    { 
    int asd1; 
    struct asd6 
    { 
    int asd7; 
    }asd6; 
    }asd1; 
}asd; 
int asd10; 
int asd11; 
struct asd *ptr1; 
struct asd1 *ptr2; 
struct asd6 *ptr3; 
asd.asd1.asd6.asd7=10; 
printf("%d\n",asd.asd1.asd6.asd7); 

} 

Le code compile mais je suis incapable de l'exécuter - Je reçois une segmentation faute. Toute aide est la bienvenue.

Merci

La sortie est:

10 

Exited: ExitFailure 3 
+1

Veuillez poster le programme complet. (Un 'include 'ne compilera pas.) Il n'y a rien d'autre avec le code tel quel. –

+0

Avec un #include correct, cela fonctionne ici http://codepad.org/18Vca84m. –

+0

Bods, l'inclusion nue a été l'effet de l'utilisation de balises «pré» au lieu de l'indentation de code. J'ai corrigé cela et j'ai également déplacé la sortie vers ici. – paxdiablo

Répondre

5

Il n'y a rien de mal avec votre code qu'un return 0; simple à la fin ne résoudrait pas :-)

Sans:

pax> cat qq.c ; gcc -o qq qq.c ; ./qq ; echo rc=$? 

#include <stdio.h> 
int main (void) { 
    struct asd { 
     int asd; 
     struct asd1 { 
      int asd1; 
      struct asd6 { 
       int asd7; 
      } asd6; 
     } asd1; 
    } asd; 
    asd.asd1.asd6.asd7=10; 
    printf("%d\n",asd.asd1.asd6.asd7); 
    //return 0; 
} 

10 
rc=3 

Avec:

pax> cat qq.c ; gcc -o qq qq.c ; ./qq ; echo rc=$? 

#include <stdio.h> 
int main (void) { 
    struct asd { 
     int asd; 
     struct asd1 { 
      int asd1; 
      struct asd6 { 
       int asd7; 
      } asd6; 
     } asd1; 
    } asd; 
    asd.asd1.asd6.asd7=10; 
    printf("%d\n",asd.asd1.asd6.asd7); 
    return 0; 
} 

10 
rc=0 

L'autre alternative consiste à passer à un compilateur C99 (ou mode). La norme C99, en partie (paraphrase):

Si le type de retour de la fonction principale est un type compatible avec int, un retour de l'appel initial à la fonction principale équivaut à appeler la fonction de sortie avec la valeur retournée par la fonction principale comme argument: atteindre le} qui termine la fonction principale renvoie une valeur de 0.

(mes italiques).

+1

C'est une diversion complètement ridicule, mais je fais généralement 'gcc -o qq qq.c && ./qq && ...' - car sinon, si elle ne compile pas, vous finissez par exécuter la dernière version qui l'a fait:) – detly