Здесь
char **names = malloc(max*sizeof(char));
names
имеет тип char**
, т.е. вам нужно выделить память для names
сначала, что вы сделали выше, а затем вам нужно выделить память для names[row]
, которую вынет, поэтому, когда это
sscanf(lines, "%s %d", names[i], &ages[i]);
выполняется, это вызывает ошибку сегментации, так как для names[i]
.
не было выделено памяти. И что может быть sizeof(lines)
?Это просто 4
байт в 32
битной системе.Измените его на MAX_LENGTH
, где MAX_LENGTH
- это не более чем максимальная длина строки в файле.
while (i < max && fgets(lines, MAX_LENGTH, fp) != NULL) { /* read MAX_LENGTH char from file and store into lines */
names[i] = malloc(MAX_LENGTH);
sscanf(lines, "%s %d", names[i], &ages[i]);
printf("%d", ages[i]);
printf("%s", names[i]);
i++;
}
И в конце, когда использование будет завершено, не забудьте освободить динамически распределенную памятьизбежать утечки памяти.