gpt4 book ai didi

c - 动态分配的结构体指针数组

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

我正在尝试使用

为指向结构(城市)的指针数组分配足够的空间
City **ptrArray = (City **)calloc(numberOfLines, sizeof(City*));

char tempArray[100];
char* temp = tempArray;
int slength;

for (int i = 0; i < numberOfLines; i++)
{ //Allocates enough memory for array of length of string
fscanf(fPtr, "%99[^:] %*c", tempArray);
slength = strlen(temp);
ptrArray[i] = (City*)malloc(sizeof(int)+(sizeof(char)*slength));
strcpy(ptrArray[i]->cityName, temp);
//fscanf(fPtr, "%d", ptrArray[i]->temperature);
}

这是我将文件中的数据读入数组的地方。调试器(Visual Studio)仅显示 ptrArray 中的一个单元格,并且似乎数据丢失了。
numberOfLines 是分配的 int 值。tempArray 是从文件中读取的字符串的临时保存位置。temp 是指向 tempArray 的指针。

额外问题:for 循环底部的注释行每次都会破坏代码,我不知道为什么。

编辑:我添加了初始化 temp 和 tempArray 的代码。另外,这是对 malloc 的奇怪调用,因为赋值指定为字符串和 int 分配足够的内存,而不是为字符串分配最大值。这是我的结构

typedef struct{
int temperature;
char cityName[100];
}City;

非常感谢您的帮助!

最佳答案

用于城市名称的动态分配。

typedef struct{
int temperature;
char *cityName;// pointer to char
}City;

City **ptrArray = calloc(numberOfLines, sizeof(City*));
if ( ptrArray == NULL) {
printf ( "calloc failed\n");
exit(1);
}

char tempArray[100];
int slength;

for (int i = 0; i < numberOfLines; i++)
{
if ( ( fscanf(fPtr, "%99[^:] %*c", tempArray)) != 1) {
//handle problem - break or return or exit.
}
slength = strlen(tempArray);
ptrArray[i] = malloc( sizeof(City));// memory for structure
if ( ptrArray[i] == NULL) {
printf ( "malloc failed\n");
exit ( 1);
}
ptrArray[i]->cityName = malloc( 1 + slength));// memory for cityName + 1 for '\0'
if ( ptrArray[i]->cityName == NULL) {
printf ( "malloc failed\n");
exit (1);
}
strcpy(ptrArray[i]->cityName, tempArray);
if ( ( fscanf(fPtr, "%d", &ptrArray[i]->temperature)) != 1) {
//handle problem break or return or exit
}
}

分配的内存在不再需要时也应该释放。 numberOfLinesptrArray 在此函数之外可能有不同的名称,因此将使用相应的名称。

for ( i = 0; i < numberOfLines; i++) {
free ( ptrArray[i]->cityName);
free ( ptrArray[i]);
}
free ( ptrArray);

关于c - 动态分配的结构体指针数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29707983/

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