这是我编写的代码,用于使用指针从结构中打印出一个字符串:
#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);
我也尝试在结构外部声明指针变量,它仍然不会编译。 我如何声明指向结构的指针有什么问题?还是完全不是别的什么?
答案 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;
此处已分配x1
和x2
的内存,因此您可以直接使用它。但在使用p
之前,您需要分配内存,或者需要分配另一个结构变量的地址。
p = malloc(sizeof(struct xenon);
或
p = &x1;
您可以直接通过p->w="my word"
分配字符串文字,否则您可以为此分配内存并复制字符串,如下所示。
p->w = malloc(strlen("my word") + 1);
strcpy(p->w, "my word")