如何访问作为指针放入数组的struct

时间:2014-05-26 23:20:34

标签: c

如何访问作为指针放入数组的结构?

如何正确访问boote数组?我也尝试使用boot = *boote[i];

typedef struct boot {
   char name[30];
} Boot;

Boot *boote[3] = {NULL, NULL, NULL};

Boot boot;

scanf("%s", boot.name);

boote[0] = &boot;

for (int i = 0; i < 3; i++) {
      if (boote[i]->name != NULL) {
         printf("%s", boote[i]->name ); // why is it empty
      }
}

更新

似乎我将对本地函数boot的引用放入全局boote

那么如何将实际boot存储在boote中,如boote [0] = boot;给我一个错误

5 个答案:

答案 0 :(得分:1)

如果您真的使用C,那么:

boot.name = "abc";

应该是:

strcpy(boot.name, "abc");

不要将此变量命名为boot;结构名为boot:

typedef struct boot {
   char name[30];
} Boot;
Boot boot; /* Should be named boot1, ETC. because you have typedef struct boot above */

在for循环中,您还需要检查以确保boote[i]boote[i]->name都为非NULL。

答案 1 :(得分:1)

你需要在C.strcpy中使用strcpy(boot.name,“abc”)

还有一件事:

if (boote[i] != NULL) {

以下是我刚刚测试过的代码,它按预期工作:

#include <stdio.h>

typedef struct boot {
   char name[30];
} Boot;

Boot *boote[3] = {NULL, NULL, NULL};

Boot boot;

int main() {
scanf("%s", boot.name);

boote[0] = &boot;

for (int i = 0; i < 3; i++) {
      if (boote[i] != NULL) {
         printf("%s", boote[i]->name ); // why is it empty
      }
}
return 0;
}

我不确定您使用的操作系统,但在Linux上我使用以下代码编译/运行:

cc -o prog -std=c99 prog.c
chmod +x prog
./prog

输出:     ABC

其中abc是我从stdin输入的字符串

答案 2 :(得分:1)

除了strcpy之外,你访问结构的方式还可以,实际上正在打印“abc”。但是,在for循环中,您循环显示尚未分配的bootie[1]bootie[2],因此它不会打印任何内容。

答案 3 :(得分:1)

通过

修复了原始发布的代码示例

1)将boot.name更改为char * 2)初始化整个数组,而不仅仅是第一个元素 现在有输出

#include <stdio.h>

typedef struct boot {
   char *name;
} Boot;

Boot *boote[3] = {NULL, NULL, NULL};
Boot boot;

int main (int arc, char **agv) {
    boot.name = "abc";

    boote[0] = &boot; boote[1] = &boot; boote[2] = &boot;

    for (int i = 0; i < 3; i++) {
       if (boote[i]->name != NULL) {
           printf("%s", boote[i]->name ); // why is it empty
       }
    }
}

$ gcc -std=c99 ex.c
$ ./a.out
abcabcabc$

答案 4 :(得分:0)

问题是我引用的是本地启动。现在我正在使用Boot boote[8];并将创建的引导直接存储在boote中。现在它有效。