파일의 레코드를 동적 배열로로드하려고합니다. 나는 다음 코드를 가지고있다 :realloc 후 struct 크기가 잘못되었습니다.
typedef struct my_data {
char name[100];
}my_data;
struct my_data *data;
void load_data()
{
struct my_data *temp = NULL;
int i = 0;
FILE * in;
if((in = fopen("data.txt","rt")) != NULL) {
temp = malloc((i+1)*sizeof(my_data));
while(!feof(in))
{
fscanf(in,"%s", &temp[i].name);
i++;
temp = realloc(temp,((i+1)*sizeof(my_data)));
};
fclose(in);
data = temp;
free(temp);
for (i=0;i<sizeof(data);i++)
printf("%s\n",data[i].name);
}
나는 100 개가 넘는다. 왜 4 개 밖에 보이지 않는 거지?
나는 당신 말이 맞습니다. 그러나 int i global을 만드는 것 이외에 레코드 수를 내보내는 다른 방법이 있습니까? –
@SamReina 포인터와 함께 크기를 항상 전달할 수 있습니다. 또는 구조체에 포인터와 크기를 넣을 수 있습니다. –
고마워요,하지만 그 루프는 테스트 목적으로 만 사용됩니다. 그래서 구조체에 int의 전체 값 (루프 외부) 또는 각 값 (루프 내부)을 추가해야하며 마지막 사례의 경우 총계를 어떻게 계산해야합니까? 각 배열 [i]에 대해 int의 해당 값이 i 인 경우 총계를 계산할 수있는 방법이 없다는 것을 의미합니다. 또는 나는 총체가 될 마지막 요소에서 int i를 얻을 것인가? 너무 많은 질문에 대해 미안하지만 나는 아직도 배우려고 노력하고있다. –