C – ¿Cómo puedo copiar una cadena en un elemento de arrays de caracteres?

Estoy intentando analizar un archivo y tener una matriz de punteros de caracteres cuya longitud es la cantidad de líneas en el archivo. Quiero copiar cada línea en un elemento de esta matriz, pero sigo recibiendo un error de segmentación. No veo lo que estoy haciendo mal, por lo que si alguien pudiera ayudar sería muy apreciado. Aquí está mi código.

char * unsplitLines[numLines]; char line[20]; int i; for(i = 0; i < lines; i++) { fgets(line, 20, fp); //printf("%s\n", line); unsplitLines[i] = line; } 

La función de obtención funciona bien, pero la asignación posterior a la causa de la falla de segmentación.

fgets no le asignan un búfer, por lo que todos los elementos en unsplitLines almacenan la misma line puntero y su contenido es la línea final del archivo.

prueba asprintf

 char * unsplitLines[numLines]; char line[20]; int i; for(i = 0; i < lines; i++) { fgets(line, 20, fp); asprintf(unsplitLines[i], "%s", line); }