2015-07-19 71 views
0

我有一個pointer..I一個struture我只是遊蕩我怎麼能打印帶有指針的結構的價值,所以我寫了這樣的代碼打印結構的元素與符號箭頭在C

#include <stdio.h> 
#include <string.h> 

typedef struct Books 
{ 
    char title[0]; 
} Book,*andi; 


int main() 
{ 
    Book book; 
    Book *andi; 
    strcpy(book.title, "avi"); 
    printf("Book title : %s\n", andi->title); 
    return 0; 
} 

當我試圖此代碼它並沒有給我一個錯誤,但產生..Can你告訴我,爲什麼發生這種情況?一個空的結果,而不是"avi" ..

任何幫助將是巨大的..Thanx

+0

你爲什麼期望它打印''avi'''? – juanchopanza

+0

C中不允許使用數組索引'0'。您可以使用靈活的數組成員,但這在這裏也沒有意義。 'strcpy'在這裏調用_undefined behaviour_。 – Olaf

回答

5

你必須初始化指針andi。例如,請嘗試以下操作:

int main() 
{ 
    Book book; 
    Book *andi = &book; 
    strcpy(book.title, "avi"); 
    printf("Book title : %s\n", andi->title); 
    return 0; 
} 

並且該數組不應具有零大小。至少像

typedef struct Books 
{ 
    char title[10]; 
} Book,*andi; 

更改結構定義此外,它不是一個好主意,以與typedef名稱相同的方式命名變量。雖然這個代碼是有效

andi andi = &book; 

不過倒不如來命名,例如相應的typedef以下方式

typedef struct Books 
{ 
    char title[10]; 
} Book,*PBook; 

在這種情況下,你可以寫

PBook andi = &book; 
+0

結果是一樣的 –

+0

@babx pox查看我更新的帖子。 –

+0

仍然是相同的錯誤 –

2

你有沒有分配任何東西到指針「andi」。 將變量簿的地址分配給該指針並打印出來。

Book book; 
Book *andi = &book; 

同樣增加標題的數組大小足以容納被賦值的值。