Вы не можете скопировать символы из одного строкового буфера в другой, просто назначив указатель (все, что нужно сделать, это сделать точку назначения исходной, как вы заметили).
Вместо этого вы должны фактически скопируйте символы, используя функцию strcpy
. Итак, вместо:
lines[count] = line; // Just makes each pointer point to the same buffer
используйте:
strcpy(lines[count], line); // Copies the CURRENT contents of "line"
У вас также есть серьезная проблема с тем, как вы используете свой буфер char** lines
. Если вам нужен массив из 200 строк, каждая из которых имеет максимальную длину 10000 символов, вы должны распределить их следующим образом:
char** lines = malloc(200 * sizeof(char*)); // Make 200 pointers
// Now allocate 10000 chars to each of these pointers:
for (int i = 0; i < 200; ++i) lines[i] = malloc(10000 * sizeof(char));
Примечание: 200 буферов будут неинициализированы (содержат случайные данные), поэтому в ваш print l oop, вы должны использовать только те, в которые вы скопировали реальные данные, используя переменную count
в качестве ограничения l oop:
for(int i = 0; i < count; i++) {
printf("%s", lines[i]);
}
Кроме того, не забудьте освободить память, выделенная, когда вы закончите:
for (int i = 0; i < 200; ++i) free(lines[i]); // Free each line buffer...
free(lines); // ... then free the array of pointers itself