Pregunta

Necesito una matriz multidimensional de caracteres que sea dinámica en una sola dimensión ...
Tengo que almacenar un par de cadenas con una longitud de 10 (o menos) caracteres cada una, pero con un número variable de "pares".

Mi idea era esta

char (*instrucao)[2][10];

Lo que me da un puntero a un conjunto de caracteres de 2x10, pero esto no funciona correctamente cuando hago algo como esto:

char strInstrucoes[117], *conjunto = calloc(21, sizeof(char));
instrucao = calloc(1, sizeof(char[2][10]));
conjunto = strtok(strInstrucoes,"() ");
for(i = 0; conjunto != NULL; i++){
    realloc(instrucao, i+1*sizeof(char[2][10]));
    sscanf(conjunto,"%[^,],%s", instrucao[i][0], instrucao[i][1]);
    printf("%s | %s\n", instrucao[i][0], instrucao[i][1]);
    conjunto = strtok(NULL, "() ");
}

Tener strInstrucoes como (abc, 123) (def, 456) (ghi, 789) , no matriculo con 3 líneas de 2 pares cada una como esta :

abc | 123
def | 456
ghi | 789

pero en cambio esto es lo que obtengo:

abc | 123
def | 45def | 45de
ghi | 789

¿Cuál es la forma correcta de hacer esto? Gracias!

¿Fue útil?

Solución

Debe asignar al puntero la nueva dirección que realloc devuelve

instrucao = realloc(instrucao, (i+1)*sizeof(char[2][10]));

Tenga en cuenta que para la comprobación de errores, es posible que desee asignar un nuevo puntero y verificar NULL . También tenga en cuenta los parens: básicamente, acaba de agregar i en lugar de multiplicar por el tamaño requerido. Fácilmente supervisado.

Tenga en cuenta que no es necesario el calloc inicial. Simplemente inicialice instrucao en NULL , y realloc se comportará como malloc cuando pase un puntero nulo por primera vez.

Otros consejos

Sería mucho mejor encontrar una biblioteca con un contenedor que satisfaga sus necesidades. En el peor de los casos, al no utilizar ninguna de las bibliotecas mucho mejores, podría tener dos matrices separadas, cada una de ellas con la mitad del par.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top