Frage

Dies bezieht sich auf eine Lösung, die auf: Schleifen eines Arrays fester Größen, ohne seine Größe in C zu definieren

Hier ist mein Beispielcode:

#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;

}

Der Versuch, dies zu kompilieren, gibt:

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
War es hilfreich?

Lösung

Neben der Initialisierung in der für Schleife steigern Sie an der falschen Stelle. Ich denke, das ist es, was Sie meinen (beachten Sie, dass ich nicht gerade ein C -Guru bin):

#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;

}

Andere Tipps

  1. Ihre Schleifenvariable it ist vom Typ char*, Der Inhalt des Arrays ist vom Typ const char*. Wenn Sie sich ändern it auch ein sein const char* Die Warnung sollte verschwinden.

  2. Sie erklären it In der für die Anweisung ist dies in C vor C99 nicht erlaubt. Erklären it am Anfang von main() stattdessen.
    Alternativ können Sie hinzufügen -std=c99 oder -std=gnu99 zu Ihren GCC -Flaggen, um die C99 -Sprachmerkmale zu ermöglichen.

Verwenden -std=c99 Option beim Kompilieren Ihres Codes, um die zu verwenden C99 Merkmale.

Veränderung it zu const char* Geben Sie (um die Warnungen zu entfernen)

Vor C99 ist es nicht standardmäßig, diesen Charakterzeiger in der für Schleife zu erklären.

Sie brauchen zwei Dinge, um dieses Kompilieren ohne Warnungen zu haben: Deklarieren Sie den Iterator const char* it, und mach es zu Beginn der Funktion und nicht in der Schleifenanweisung.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top