指向结构不返回字符串的指针

时间:2014-07-13 05:03:25

标签: c pointers structure instance-variables

这是我编写的代码,用于使用指针从结构中打印出一个字符串:

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

现在我得到一个错误,说我没有在函数main中声明变量p。但是当我宣布

时也应如此
x1.w="my word";
printf("%s",x1.w);

我也尝试在结构外部声明指针变量,它仍然不会编译。 我如何声明指向结构的指针有什么问题?还是完全不是别的什么?

2 个答案:

答案 0 :(得分:3)

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

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

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

修复后,您将遇到Steger在上述评论中提到的运行时错误。您可以将x1.p指定给&amp; x2。但是,如果您正在尝试创建链接列表,那么您希望将x1.p分配给动态分配的结构更为常见。

答案 1 :(得分:0)

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

p是结构的成员。您尚未向该结构声明任何指针变量。您需要声明struct变量,如下所示。

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")