¿Cómo guardar un valor de puntero en una matriz de caracteres?

Tengo un archivo con datos como este.

{0 /Data1/ , 0x00, 0, 0xFF}, {1 /data2/ , 0x00, 0, 0xFF}, {2 /data3/ , 0x00, 0, 0xFF}, {3 /data4/ , 0x00, 0, 0xFF}, ... 

Quiero imprimir sólo la segunda columna de cada línea. A continuación se muestra el código que trabajé.

 #include #include int main () { char filename[] = "file.txt"; FILE *file = fopen(filename, "r"); if(file!= NULL) { char line[128]; char * word1; char word2; char word3; int i=0; clrscr(); while ( fgets( line, sizeof line, file)!= NULL) { i=0; word1 = strtok(line, " ,"); while(word1!= NULL) { i++; if(i==2 ){ printf("%s\n",word1); } word1 = strtok(NULL," ,"); } } fclose(file); } else { perror(filename); } getch(); return 0; } 

funciona bien. ¿Puedo guardar el valor Im imprimiendo en cada línea en una matriz? Probé algo como esto

 if(i==2){ word2 = * (word1); } printf("%s\n",word1); 

Pero me da una asignación de puntero nulo. ¿Cómo almacenar los valores que estoy imprimiendo en una matriz?

Está guardando solo el primer carácter de string word1 en word2.

Si desea almacenar todas las 2as columnas, debe asignar una matriz dinámica de punteros a (char *) y luego a cada palabra / columna asignar espacio a la palabra y copiar con un strcpy porque word1 está cambiando en cada iteración de while para que pueda No se guarde solo la referencia.

Podría usar una matriz asignada dinámicamente, que crecerá a medida que necesite más espacio. Consulte ¿Por qué una matriz de longitud variable grande tiene un valor fijo -1 incluso si se asigna en C? para mas ayuda

Intenta algo como esto:

 #define MAX_BUFFER_SIZE 256 /* ... */ char ** lines = malloc(MAX_BUFFER_SIZE + 1); char ** p = lines; char ** newbuf; int len; int bytesloaded = 0; int buf_size = MAX_BUFFER_SIZE; assert(lines != NULL); //... loop etc.. if(i==2 ){ len = strlen(word1); bytesloaded += len; if(bytesloaded >= buf_size) /* Controls buffer size. For avoid buffer overflow/heap corruption/UB. */ { buf_size += MAX_BUFFER_SIZE; newbuf = realloc(lines, buf_size); if(!newbuf) /* return or break. */ { printf("Allocation failed.\n"); free(lines); return 1; } lines = newbuf; } *p++ = word1; /* store the word in lines */ printf("%s\n",word1); } 

Nota: No olvide colocar el terminador \0 , \0 , en la matriz, después del final del primer bucle.

No he probado este código, pero creo que funciona.

Es un ejemplo simple de cómo hacerlo: a dynamic memory allocation , controlar su tamaño, la reasignación de memoria y el almacenamiento de valores.