如何访问作为指针放入数组的结构?
如何正确访问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;给我一个错误
答案 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中。现在它有效。