2010-08-30 118 views
1

我試圖進入最裏面的結構內的元素ASD7,這裏是我的代碼:訪問結構元素

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

} 

的代碼編譯,但我無法運行它 - 我得到一個分割故障。任何幫助都會很棒。

感謝

輸出是:

10 

Exited: ExitFailure 3 
+1

請發佈完整的程序。 ('#include'不會被編譯。)否則,代碼沒有任何特別的錯誤。 – 2010-08-30 05:00:27

+0

使用正確的#include,它在這裏工作http://codepad.org/18Vca84m。 – 2010-08-30 05:09:41

+0

Bods,裸體包含是使用'pre'標籤而不是代碼縮進的效果。我解決了這個問題,並將輸出移到了這裏。 – paxdiablo 2010-08-30 05:42:06

回答

5

沒有什麼不對您的代碼,在最後一個簡單的return 0;不會修復:-)

沒有:

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 

With:

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 

另一種方法是切換到C99編譯器(或模式)。 C99標準狀態,部分(轉述):

如果主函數的返回類型與INT兼容的類型,從最初的呼叫至主函數的返回相當於調用與出口功能由主功能作爲它的參數的返回值:到達}終止了 主函數返回0

(我的斜體字)的值。

+1

這是一個完全荒謬的分流,但我通常做'gcc -o qq qq.c && ./qq && ...' - 因爲否則如果它不能編譯,最終會運行最後一個版本,而不是: ) – detly 2010-08-30 06:03:28