【问题标题】:pointer to structure not returning a string指向不返回字符串的结构的指针
【发布时间】:2014-07-13 05:03:24
【问题描述】:

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

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

我还尝试在结构外部声明指针变量,但它仍然无法编译。 我如何声明指向结构的指针有问题吗?还是完全是别的东西?

【问题讨论】:

  • 好吧,您已经定义了 x1 和 x2。所以你有 x1.p 和 x2.p 但它们没有在你的代码中初始化。例如,您可以设置 x1.p = &x2;
  • x1x2 是全局变量,所以它们存在。

标签: c pointers structure instance-variables


【解决方案1】:

发生编译时错误是因为 p 是结构的成员,而不是范围内的变量。因此,就像您提到它的兄弟姐妹一样,这样称呼它。

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

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

一旦你解决了这个问题,你就会遇到 Steger 在上面的评论中提到的运行时错误。您可以将 x1.p 分配给 &x2。但是,如果您尝试创建一个链表,则更常见的是您希望将 x1.p 分配给动态分配的结构。

【讨论】:

  • 在取消引用之前,您需要使x1.p 指向有效内存
  • 是的,上面第二段提到了。
  • 非常感谢您的解释:)
  • 但是,我不明白您关于链表的观点...您介意再解释一下吗?
  • 一个结构包含指向同一类型的另一个实例的指针的一个原因是创建一个链表 - 一个元素的线性集合,可以独立分配,不一定在内存中相邻,具有长度在运行时确定。我猜测这可能是你的意图。
【解决方案2】:
(*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-&gt;w="my word" 直接分配字符串文字,或者您可以为此分配内存并复制字符串,如下所示。

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

【讨论】:

  • 我理解你的意思,但是你将如何将字符串分配给 char *w?...如中,你能给出具体的代码吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-03-23
  • 2014-12-30
  • 1970-01-01
  • 2013-09-27
  • 1970-01-01
  • 2014-09-09
  • 2010-12-01
相关资源
最近更新 更多