2015-07-19 37 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; 

同样增加标题的数组大小足以容纳被赋值的值。