2013-07-10 110 views
0

我們如何在嵌套結構中使用指針?嵌套結構中的指針

我在下面給出的代碼中創建了兩個結構,我如何訪問st_no的元素? 徹底解釋嵌套結構。

#include <stdio.h> 
#include <stdlib.h> 

typedef struct 
{ 
    char st_no[22]; 
    int no; 
}address; 

typedef struct 
{ 
    char name[15]; 
    int mark; 
    address addr; 
}student; 

int main (void) 
{ 
student *selva; 

strcpy(selva->name, "ajay"); 
strcpy(selva->addr.st_no,"3rd st"); 
printf("%s",selva->name); 

return 0; 
} 
+5

這將段錯誤爲'selva'是一個未初始化的指針。也許刪除指針並將其用作本地對象?爲你的'strcpy'函數添加'#include '。 – Nobilis

回答

3

您只有一個指向學生而不是實際學生的指針。要動態地分配你需要:

student * selva = malloc(sizeof(student)) // be sure to free this later 

然後,你可以這樣做:

strcpy(selva->addr.st_no, "3rd st") 

或者,如果你不需要做動態,你可以在棧像這樣在創建變量:

student selva 

然後複製到st_no,您可以:

strcpy(selva.addr.st_no, "3rd st") 
+1

也許值得指出的是,如果僅僅是爲了使用指針,OP可以將指針指向堆棧上的結構,然後繼續使用原始代碼。 OP將不必擔心釋放它。 – Nobilis

0

使用它象下面

student *selva; 
selva = malloc(sizeof(student)); 
strcpy(selva->name, "ajay"); 
strcpy(selva->addr.st_no,"3rd st");