【发布时间】:2021-11-30 10:45:11
【问题描述】:
我有一个主程序,它应该通过调用函数来加载数据(结构数组,未定义大小)、正确的数据,然后继续处理它。
以下是我正在尝试做的一个小例子。函数loadData接收指向主指针的指针,从而可以通过malloc为主指针分配一部分内存。数据在loadData 函数中加载和打印。但是当它返回 main 时,它只显示结构数组的第一项的正确内容。第二项是垃圾。
#include <stdio.h>
#include <stdlib.h>
typedef struct
{
int dni;
char cat;
int weight;
} boxers;
void loadData(boxers *(*xbox), int *xcount)
{
printf("How many boxers? ");
scanf("%d", xcount);
*xbox = (boxers *) malloc(sizeof(boxers) * (*xcount));
for (int i = 0; i < (*xcount); i++)
{
printf("Provide the DNI for boxer number %d: ", i);
scanf("%d", &xbox[i]->dni);
printf("Provide the Category for boxer number %d: ", i);
scanf(" %c", &xbox[i]->cat);
printf("Provide the Weight for boxer number %d: ", i);
scanf("%d", &xbox[i]->weight);
}
// First print the result of data loading
for (int i = 0; i < *xcount; i++)
{
printf("DNI for boxer number %d, is: %d \n", i, xbox[i]->dni);
printf("Category for boxer number %d, is: %c \n", i, xbox[i]->cat);
printf("Weight for boxer number %d, is: %d \n", i, xbox[i]->weight);
}
}
int main()
{
boxers *box;
int count;
loadData(&box, &count);
// Second print the result of data loading
printf("\n\n");
for (int i = 0; i < count; i++)
{
printf("DNI for boxer number %d, is: %d \n", i, box[i].dni);
printf("Category for boxer number %d, is: %c \n", i, box[i].cat);
printf("Weight for boxer number %d, is: %d \n", i, box[i].weight);
}
free(box);
return 0;
}
控制台输出如下:
How many boxers? 2
Provide the DNI for boxer number 0: 123
Provide the Category for boxer number 0: A
Provide the Weight for boxer number 0: 45
Provide the DNI for boxer number 1: 789
Provide the Category for boxer number 1: B
Provide the Weight for boxer number 1: 56
DNI for boxer number 0, is: 123
Category for boxer number 0, is: A
Weight for boxer number 0, is: 45
DNI for boxer number 1, is: 789
Category for boxer number 1, is: B
Weight for boxer number 1, is: 56
DNI for boxer number 0, is: 123
Category for boxer number 0, is: A
Weight for boxer number 0, is: 45
DNI for boxer number 1, is: 7471203
Category for boxer number 1, is: x
Weight for boxer number 1, is: 7536756
【问题讨论】:
标签: c function pointers struct