У вас есть пара ошибок:
1) Вы никогда не выделяете память, где будет храниться name
.Вы можете обойти это просто используя:
char name[128];
Тогда, когда вы используете fscanf , вы получите:
fscanf(fp, "%127s", name); // stores this in name correctly, now...
2) Выненадлежащим образом выделяется место для data[i]
:
data[i] = (char*)malloc(sizeof(name));
Это выделит место для хранения одного указателя на символ (char*
), поскольку name является char*
.Вам нужно сделать:
data[i] = (char*)malloc(sizeof(char) * (strlen(name) + 1 ) );
Это выделит достаточно места для данных плюс один завершающий символ.
3) Вы неправильно назначаете data[i]
.Вы не можете просто использовать =
здесь, но вам нужно использовать strcpy :
strcpy(data[i], name);
4) Вы не освобождаете отдельные указатели в элементах data[..]
.Вы должны добавить после своего printf бесплатный:
for(i=0; i<size; i++)
{
printf("%s ", data[i]);
free(data[i]); // Free each pointer you allocate
}
Каждый malloc
звонок должен в конечном итоге иметь соответствующий free
звонок.