Pregunta

Esto es en referencia a una solución publicada en: bucle de una matriz de tamaño fijo sin definir su tamaño en C

Aquí está mi código de ejemplo:

#include <stdio.h>
#include <stdlib.h>

int main(int argc, char *argv[])
{
    static const char *foo[] = {
           "this is a test",
           "hello world",
           "goodbye world",
           "123", 
           NULL
    };

    for (char *it = foo[0]; it != NULL; it++) {
        printf ("str %s\n", it);
    }

    return 0;

}

Tratando de compilar esto da:

gcc -o vararray vararray.c
vararray.c: In function ‘main’:
vararray.c:14: warning: initialization discards qualifiers from pointer target type
vararray.c:14: error: ‘for’ loop initial declaration used outside C99 mode
¿Fue útil?

Solución

Además de la inicialización en el bucle for, usted está incrementando en el lugar equivocado. Creo que esto es lo que quiere decir (nota que no soy exactamente un gurú C):

#include <stdio.h>
#include <stdlib.h>

int main(int argc, char *argv[])
{
    static const char *foo[] = {
           "this is a test",
           "hello world",
           "goodbye world",
           "123", 
           NULL
    };
    const char **it;
    for (it=foo; *it != NULL; it++) {
        printf ("str %s\n", *it);
    }

    return 0;

}

Otros consejos

  1. Su variable de bucle it es de tipo char*, el contenido de la matriz son de tipo const char*. Si cambia it ser también un const char* la advertencia debería desaparecer.

  2. declarar it dentro de la instrucción for, esto no está permitido en C antes de C99. it declarar al principio de main() lugar.
    Alternativamente se puede añadir o -std=c99 -std=gnu99 a sus banderas gcc para permitir a las características del lenguaje C99.

Utilice la opción -std=c99 al compilar el código con el fin de utilizar las funciones de C99.

Cambiar it a tipo const char* (para eliminar las advertencias)

Antes de C99, declarando que puntero del personaje en el bucle no es estándar.

Se necesitan dos cosas a tener esta compilación sin advertencias: declarar el iterador const char* it, y hacerlo al principio de la función y no en el estado de bucle

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