gpt4 book ai didi

c - 分配给指针数组结构的元素不起作用(空)

转载 作者:行者123 更新时间:2023-11-30 19:25:15 27 4
gpt4 key购买 nike

我是新来的,也是编程方面的新手。我的问题是,当我尝试为数组指针结构的属性分配一个值时,它不起作用。以下代码没有结构工作:

#include <stdio.h>
#include <stdlib.h>

int main()
{
int *array;
int size = 10;
array = malloc(sizeof(int) * size);

int i;
for (i = 0; i < size; i++)
{
array[i] = i * i;
}

for (i = 0; i < size; i++)
{
printf("%d\n", array[i]);
}
}

但是当我放置结构时,它会打印(null):

#include <stdio.h>
#include <stdlib.h>

typedef struct Person
{
unsigned char name;
} Person;

int main()
{
Person *personArray;
int size = 10;
personArray = (Person *)malloc(sizeof(int) * size);

int i;
for (i = 0; i < size; i++)
{
unsigned char name = "Person_name"; //[Warning] initialization makes integer from pointer without a cast
personArray[i].name = name;
}

for (i = 0; i < size; i++)
{
printf("%s\n", personArray[i].name); //Print (null)
}
}

为什么会发生这种情况?如果我是新来的,很抱歉。

谢谢,以下代码可以工作:

#include <stdio.h>
#include <stdlib.h>

typedef struct Person
{
unsigned char *name;
} Person;

int main()
{
Person *personArray;
int size = 10;
personArray = (Person *)malloc(sizeof(Person) * size);

int i;
for (i = 0; i < size; i++)
{
unsigned char *name = "Person_name";
personArray[i].name = malloc(strlen(name) + 1); //[Warning] incompatible implicit declaration of built-in function 'strlen'
strcpy(personArray[i].name, name); //[Warning] incompatible implicit declaration of built-in function 'strcpy'
}

for (i = 0; i < size; i++)
{
printf("%s\n", personArray[i].name);
free(personArray[i].name);
}

free(personArray);
}

最佳答案

首先,这里

personArray = (Person *)malloc(sizeof(int) * size);

您可能需要 sizeof(Person) 而不是 sizeof(int)。此外,您似乎对 char 和字符串有些困惑。这里:

unsigned char name = "Person_name";

尝试将字符串文字分配给char。您的编译器应该发出警告。相反,这应该是unsigned char *name。并将 Person 中的 name 设为指针。另请注意,这不会复制。如果您想要字符串的副本,请执行以下操作:

unsigned char *name = "Person_name";
personArray[i].name = malloc(strlen(name) + 1);
strcpy(personArray[i].name, name);

如果您这样做,请在使用完字符串后释放该字符串,例如在打印它之后:

free(personArray[i].name);

并且(无论哪种方式)完成后,不要忘记释放 personArray 的内存:

free(personArray);

关于c - 分配给指针数组结构的元素不起作用(空),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59141479/

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