如何正确地将值分配给数组(结构类型)元素?
Posted
技术标签:
【中文标题】如何正确地将值分配给数组(结构类型)元素?【英文标题】:How can I properly assign a value to an array (of structure type) element? 【发布时间】:2017-07-23 03:56:45 【问题描述】:#include <stdio.h>
struct virus
char signature[25];
int size;
v[2];
int main(void)
static v[0] = "Yankee",1813;
static v[1] = "Doodle",2813;
int i;
for(i=0;i<=1;i++)
printf("%s %d\n",v[i].signature,v[i].size);
return 0;
我在这个 C 代码中遇到编译器错误。
错误:函数
main()
中的声明语法
我猜测v[2]
中存在一些错误,因为它与外部类相关联,而v[0]
和v[1]
与静态类相关联。
但是,我不确定这是唯一的原因还是其他原因?
编辑:我通过删除错误的语法来编辑代码。
【问题讨论】:
您需要花费数小时或数天时间阅读有关 C 编程语言的知识。在此之前不要触摸键盘。 在`main`中也删除static
@ammoQ 删除仍然没有帮助。错误依然存在。
@Barry 对不起,我的错误。初始化例如struct xyz v = 1, "foobar" ;
有效,但类似的作业 v = 1, "foobar" ;
无效。
【参考方案1】:
v[2]
的声明没有错误,问题在后面。
你写过
static struct v[0] = "Yankee",1813;
试图定义一个大小为 0 的数组,默认 C 标准不允许这样做。
也就是说,语法也非常错误。你没有合适的type,记住,struct
本身不是一个类型,它是一个关键字。 struct <something>
实际上是一个类型。
那么,从逻辑的角度来看,您可能完全不想要一个新变量。如果您想使用v
中的数组元素,只需使用变量名即可。类似的东西
#include <stdio.h>
struct virus
char signature[25];
int size;
v[2] = "Yankee",1813, "Doodle",2813; //get it initialized, job done
int main(void)
int i;
for(i=0;i<=1;i++)
printf("%s %d\n",v[i].signature,v[i].size);
return 0;
会以更好的方式完成这项工作,恕我直言。
编辑:
如果您对分配单个元素感兴趣(不是初始化),那么,您不能为此目的使用大括号括起来的初始化程序,它并不意味着是分配的 RHS 操作数.为此,您需要使用 compound literal,例如
v[0] = (struct virus)"Yankee",1813;
v[1] = (struct virus)"Doodle",2813;
也会做这项工作。
【讨论】:
v[0] = "洋基队",1813;但是为什么这也不起作用? 如果我只写 v[0] = "Yankee",1813 。它仍然无法正常工作。您能否提供一些基于此的理由。此外,我得到了你的答案。 @SouravGhosh 谢谢 :)) 学习新东西。 @Barry 不客气,这就是在这里的全部意义,不是吗?快乐学习。 :) @Barry 什么样的参考? did you see this?【参考方案2】:不要将结构定义与变量声明混为一谈,这是一种草率的做法。
改为使用 typedef:
typedef struct
char signature[25];
int size;
virus_t;
那么你就可以随意声明这个类型的变量了:
static virus_t v[2] =
"Yankee",1813,
"Doodle",2813
;
或者用指定的初始化器:
static virus_t v[2] =
[0] = "Yankee",1813,
[1] = "Doodle",2813
;
【讨论】:
谢谢!!非常有用:)以上是关于如何正确地将值分配给数组(结构类型)元素?的主要内容,如果未能解决你的问题,请参考以下文章
双指针将 char 数组值分配给 char 数组,结构使用 char 指针
我应该如何释放类型映射中为 argout 结构数组分配的内存?