我试图创建一个动态数据库,我可以修改它的大小,这是我写的代码,我把product char指针赋值给null
,price赋值给-1
,我希望它已经创建了数据库,让我继续创建新的数据库,用新的大小替换旧的数据库,但到目前为止,它只返回内存方向,并停止程序。
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
typedef struct _product_t {
char *product;
float price;
} product_t;
product_t *newDatabase(product_t *database, int *dbSize, int newSize) {
free(database);
product_t *newdatabase = (product_t*)malloc(sizeof(database)*newSize);
newdatabase->product = (char*)malloc(sizeof(char)*20);
newdatabase->product = NULL;
newdatabase->price = -1;
free(newdatabase->product);
return newdatabase;
}
int main(void) {
product_t *database = NULL;
int dbSize = 0;
char cmd;
do{
printf("Command?");
scanf(" %c", &cmd);
switch (cmd) {
case 'q':
printf("Bye!");
break;
case 'n':
printf("Size? ");
int newSize2 = 0;
scanf("%d", newSize2);
newDatabase(database, &dbSize, newSize2);
break;
default:
printf("Unkown command '%c'\n",cmd);
}
}while(cmd != 'q');
return 0;
}
2条答案
按热度按时间kmbjn2e31#
使用
realloc()
可以更改分配的大小。数组的大小应该使用sizeof(*database)
,因为sizeof(database)
只是指针的大小,而不是结构的大小。初始化新数组元素时,需要一个循环。
newdatabase
指向数组的开头,而不是添加的新元素。您还需要修复要求输入大小的行:
除了阅读字符串时,需要传递要写入的变量的地址,因此应该是:
mznpcxlj2#
最新的完全工作的版本,非常感谢大家的帮助!
通过大家的帮助找到了工作解决方案,谢谢