gpt4 book ai didi

c - 将 C 上的结构数组设置为 NULL

转载 作者:太空宇宙 更新时间:2023-11-04 06:21:47 24 4
gpt4 key购买 nike

我编写了这段 C 代码以将 C 上的结构数组设置为 NULL。开始吧,

struct Worker
{
char name[50];
unsigned int salary;
};

int main()
{
int n;
struct Worker number[50];

for(n=0;n<50;n++)
{
number[n].name=NULL;
}
}

编译器给出此错误:main.c:65:26: error: assignment to expression with array type

最佳答案

在您的结构中,字段 name是一个包含 50 个字符的数组。数组不是指针,您无法更改它们;你只能改变他们的内容。

因此,如果你想初始化 name字段,您可以通过将第一个字符设为空终止符来将名称设为空字符串:

*number[n].name = '\0';

请注意,您的名字将始终包含 50 个字符,但您只使用了第一个终止符之前的字符。

因为您的数组不是指针,所以以下内容也不起作用:

number[0].name = "Tom";

您必须将内容填充到数组中,可能使用 strcpy来自 <string.h> :

strcpy(number[0].name, "Tom");

如果要测试一个字符串是否为空,测试第一个字符是否为空终止符:

if (*number[n].name == '\0') ... // string is empty

您也可以显式初始化数组:

struct Worker number[50] = {
{"Alice", 3200},
{"Bob", 2700},
{"Charlotte", 3000}
};

这将为您提供 3 个名称和薪水为空的 worker ,以及 47 个名称为空字符串且薪水为零的 worker 。当然,您可以稍后填写或重置前三个。

如果你初始化数组:

struct Worker number[50] = {{""}};

您将获得一个数组,其中包含您可以填充的所有空名、所有零薪 worker 。

(也就是说,如果您的 name 成员是一个类似 char *name; 的指针,您可以说 number[n].name = "Tom";number[n].name = NULL; 。但这意味着您必须处理指针指向的所有内存对自己来说,这并不容易。

50 个字符数组的优点是每个工作人员已经有 50 个字符可以用作他们的名字。 (好吧,最多 49 个加上一个空终止符。)缺点是您会在大多数名称上浪费内存,因为它们更短,如果您需要更长的名称,您就不够灵活。但是在您了解更多关于指针和内存管理之前,数组是必经之路。只需确保您不超过其限制即可。)

关于c - 将 C 上的结构数组设置为 NULL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33636312/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com