¿Cuál es el problema en el código al utilizar un puntero doble para char?
char* scanString()
{
char* str = NULL;
char* temp = NULL;
int numOfChars = 0;
char c = '0';
while (c != '\n')
{
scanf("%c", &c);
str = (char*)realloc(str, sizeof(char) * (numOfChars + 1));
temp = str;
if (str == NULL)
{
str = temp;
return str;
}
str[numOfChars] = c;
if (c == '\n')
{
str[numOfChars] = '\0';
}
numOfChars++;
}
return str;
}
int main()
{
char** doublePointer = NULL;
char* m = scanString();
char* token = strtok(m, ",");
int i = 0;
while (token != NULL)
{
doublePointer = (char**)realloc(doublePointer, sizeof(char*) * (i+1));
if (doublePointer)
doublePointer[i] = (char*)realloc(doublePointer[i], strlen(token) + 1);
strcpy(doublePointer[i], token);
token = strtok(NULL, ",");
i++;
}
for (int k = 0; k <= i; k++)
{
printf("%d: %s\n", k + 1, doublePointer[k]);
}
return 0;
}
Estoy intentando obtener una cadena como “opcion1,opcion2,opcion3” y convertirla en un arreglo de cadenas, colocando cada opción en su lugar en el arreglo. Al final, quiero imprimir cada opción en el orden en que se colocaron.
¿Qué estoy haciendo mal?
Gracias por ayudar.
davy.ai
No parece haber ningún problema importante con el código que pudiera impedir que funcione según lo previsto. Sin embargo, hay algunas cosas pequeñas que podrían mejorarse:
scanf("%c", &c)
es vulnerable a ataques de desbordamiento de búfer. Para mitigar esto, el código debería usar una función de entrada más segura comofgets()
en su lugar.En el bucle
for
que imprime las opciones, la condición de terminación debería serk < i
en lugar dek <= i
para evitar acceder a un elemento fuera de los límites.Podría ser buena idea agregar alguna verificación de errores para las llamadas a
realloc()
, en caso de que falle al asignar memoria.Aparte de eso, el código debería funcionar correctamente para la tarea dada.