2014-07-13 35 views
1

下面是我写使用指针打印出从结构的串码:指针结构没有返回一个字符串

#include <stdio.h> 
#include <stdlib.h> 
struct xenon 
{ 
    int size1; 
    int marks[10]; 
    char *w; 
    struct xenon *p; 
} x1,x2; 

main() 
{ 
    x1.size1=10; 
    x2.size1=6; 
    printf("%d\n",x1.size1); 
    printf("%d\n",x2.size1); 
    (*p).w="my word"; 

    printf("%s\n",(*p).w); 
    printf("%s\n",x1.w); 
} 

现在我得到一个错误说我还没有宣布函数变量p主要。但是,这也应该是这样,当我宣布

x1.w="my word"; 
printf("%s",x1.w); 

我也试过声明指针变量只是结构之外,它仍然不会编译。 我如何声明一个指向结构的指针是错误的?还是完全是另一回事?

+0

那么,你已经定义了x1和x2。所以你有x1.p和x2.p,但是它们没有在你的代码中初始化。你可以设置,例如,x1.p = &x2; – Steger

+0

'x1'和'x2'是全局变量,所以它们存在。 – AntonH

回答

3

发生编译时错误是因为p是结构的成员,而不是范围内的变量。所以请参考它,就像你提到它的兄弟姐妹一样。

(*x1.p).w="my word"; 

printf("%s\n",(*x1.p).w); 

解决该问题后,您会遇到Steger在上述评论中提到的运行时错误。您可以将x1.p分配给& x2。但是如果你想创建一个链表,你会想要将x1.p分配给一个动态分配的结构。

+0

您需要在解除引用前将'x1.p'指向有效内存 –

+0

是的,并且在上面的第二段中提到。 –

+0

非常感谢解释:) –

0
(*p).w="my word"; 

p是该结构的成员。您尚未向该结构声明任何指针变量。您需要像下面那样声明结构变量。

struct xenon 
{ 
    int size1; 
    int marks[10]; 
    char *w; 
} x1,x2 *p; 

这里内存x1x2已经被分配了,这样你就可以直接使用它。但在使用p之前,您需要分配内存或者需要分配另一个结构变量的地址。

p = malloc(sizeof(struct xenon); 

p = &x1; 

您可以直接通过p->w="my word"指定字符串文字,否则你可以为分配内存和复制字符串像下面。

p->w = malloc(strlen("my word") + 1); 
strcpy(p->w, "my word") 
+0

我明白你的观点,但是你怎样将字符串赋值给char * w?......如你能给出具体的代码吗? –

+0

更新了我的答案。请检查。 –