C : Array of string als Funktions-argument

Also was ich habe ist eine Datei main.c, die inklusive einer header-Datei, die ich gemacht utils.h, mit vorwärts-Referenzen auf Funktionen in meiner Quell-Datei utils.c

In utils.c:

Habe ich eine Funktion akzeptiert ein array von string als argument und druckt es aus, wie ein Menü:

void showMenu(const char *menu[])
{
    int menulen = sizeof(menu)/sizeof(*menu);

    int i;
    for(i = 0; i < menulen; i++)
    {
        printf("[%d] .. %s\n", (i+1), menu[i]);
    }
}

In main.c:

Habe ich einfach diese Funktion aufrufen:

const char *menu[] =
{
        "Customers",
        "Orders",
        "Products"
};

int main(void)
{
    showTitle("Customer Orders System");
    int menulen = sizeof(menu)/sizeof(*menu);
    showMenu(menu);
    getch();
}

Mein Problem:

Meine showMenu Funktion ist die Berechnung der Länge des Arrays, und dann, Durchlaufen es, den Druck der Saiten. Dies funktioniert, wenn die Funktion war in main.c, aber ich bin benötigt, um die Organisation dieses Projektes in separaten Dateien.

Die Länge wird nun berechnet, wie 1. Nach einigen Debuggen, ich denke, das ist ein pointer-problem, aber ich scheinen, um es zu beheben. Das argument für showMenu nach dem Aufruf ist der Typ

const char** menu

dass nur das erste element, das von meiner ursprünglichen array.

Versuchte ich Dereferenzierung das argument, übergeben Sie einen Zeiger des Arrays, und beide zur gleichen Zeit.

Seltsam genug, die gleiche code-Zeile funktioniert in der main-Funktion.
Ich wirklich nicht wollen, zu haben, um dieses problem zu beheben, indem Sie hinzufügen eine Länge von array-argument an die Funktion.

Jede Hilfe wird sehr geschätzt.

  • +1 für deine präzise Beschreibung des Problems, für Ihre eigene Analyse, und für gut formatierten code, der eigentlich anderen erlaubt, zu reproduzieren das beschriebene Verhalten.
  • Danke! Ich weiß, was es ist wie der Versuch, zu beantworten, um eine typische nicht-formatierte 3-line Beschreibung ein problem. Plus macht es langweilig zu Lesen.
InformationsquelleAutor Zyyk Savvins | 2012-11-27
Schreibe einen Kommentar