【发布时间】:2023-04-11 01:18:01
【问题描述】:
我创建了一个动态数组名称listProduct,现在我想从文件中读取数据并插入到这个数组中。但是我在解析数组时遇到了一些麻烦,我知道我解析了错误的地址:(但我无法解决这个问题。有人可以帮助我(我花了 3 个小时,但没有用)。谢谢全部
在main()中
int main(int argc, char** argv) {
struct Product* listProduct = (struct Product*) malloc(sizeof(struct Product) * 1);
printf("address of listProduct in main: %d \n", &listProduct);
int length = 0;
char fileName[] = "products.txt";
length = readDataFromFile(&listProduct,length,fileName);
printf("address of listProduct in main after insert \n: %d \n", &listProduct);
printf("length in main %d \n", length);
printf("start for in main \n");
int i;
for(i =0; i < length; i++){
printf("%s \n", listProduct[i].tenSanPham);
}
printf("end for in main \n");
return 0;
}
在 readFile 函数中
int readDataFromFile(struct Product* listProduct,int length, char fileName[]){
printf("address of listProduct in readData: %d \n", (*listProduct));
FILE *fp;
char buff[1024];
struct Product product;
fp = fopen(fileName, "r");
while(fgets(buff, 255, (FILE*)fp) != NULL){
product = convertStringToProduct(buff);
printf("IN readData: %s \n", product.tenSanPham);
insertProduct(product, &(*listProduct), length);
length++;
}
fclose(fp);
int i ;
printf("\n\ncheck value in listProduct after insert\n");
for(i = 0; i < length; i++){
printf("IN FOREACH readData: %s \n", listProduct[i].tenSanPham);
}
printf("read done \n");
return length;
}
在插入函数中
void insertProduct(struct Product product, struct Product** listProduct, int length)
{
printf("addres of listProduct in insert %d \n", (*listProduct));
printf("Product In Insert: %s \n", product.tenSanPham);
*listProduct = (struct Product*) realloc(listProduct, sizeof(struct Product) * (length+1));
(*listProduct)[length] = product;
printf("Get product inserted: %s length: %d \n", (*listProduct)[length].tenSanPham, length);
printf("insert done!\n");
}
控制台:
address of listProduct in main: 6487568
address of listProduct in readData: 6486368
IN readData: FOOD 1
addres of listProduct in insert 1905632
Product In Insert: FOOD 1
--------------------------------
Process exited after 0.5239 seconds with return value 3221226356
Press any key to continue . . .
【问题讨论】:
-
你重新分配了数组,最初是一个元素,所以它的位置可能会改变。
-
@WeatherVane 我该如何解决这个问题?
-
您永远不会检查任何错误。很坏的习惯
-
@Stack 你想解决什么问题?
-
&(*listProduct)是什么?