c - 分配给指针数组结构的元素不起作用(空)
问题描述
我是新来的和编程的。我的问题是当我尝试为数组指针结构的属性分配一个值时,它不起作用。以下代码没有结构工作:
#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]);
}
}
但是当我把结构它确实打印(空):
#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
. 并且还使name
inPerson
成为一个指针。另请注意,这不会复制。如果您想要字符串的副本,请改为执行以下操作:
unsigned char *name = "Person_name";
personArray[i].name = malloc(strlen(name) + 1);
strcpy(personArray[i].name, name);
如果这样做,请在使用完毕后释放字符串,例如在打印之后:
free(personArray[i].name);
并且(无论哪种方式)完成后,不要忘记释放以下内存personArray
:
free(personArray);
推荐阅读
- regex - Knime 字符串替换器,替换所有内容,直到一些特殊字符串
- c# - 另一个枚举与 int
- excel - 我怎样才能获得 2 个矩阵的所有组合。两者都有数值
- php - 如何在 PHP 中继续将 && 附加到条件语句?
- javascript - 为什么添加innerHTML后循环和数组停止工作?
- selenium - selenium 网格控制台显示的浏览器版本是什么?
- python - 使用 Python 在 Selenium 中禁用 Chrome 无头日志(每天获得 1TB)
- google-sheets - 如何避免/绕过/忽略 Google 表格中的 #N/A #NV 错误?
- python - 如何在加载基于文本的程序时播放 mp3 文件?Python
- python - 作为环境希伯来语支持中的管理员错误登录到网站的问题