C: Anzahl der Elemente eines Char-Pointer-Arrays (char *var[])



  • Hallo,
    also ihr kennt ja alle folgendes:
    char *mein_bsp[] = {"Wort1","Wort2","Wort3"};

    Hierbei werden ja in mein_bsp 3 Pointer gespeichert.

    Wie kann ich jetzt ermitteln (in C), wieviele Pointer in mein_bsp gespeichert wurden?
    Sprich, so dass ich 3 als dezimal Wert erhalte.

    Denn mein Problem ist, dass solch ein Char-Array bei mir dynamisch erstellt wird, und in einer Schleife möchte ich alle Einträge ausgeben.

    ca. so:
    for(i=0;i<anzahl_woerter || mein_bsp[i] == NICHT_MEHR_VORHANDEN;i++)

    MFG



  • sizeof(mein_bsp) / sizeof(mein_bsp[0])
    


  • Hallo,
    ok danke, für das angegebene Beispiel funktioniert es.
    Aber mein Programm sieht noch etwas anders aus, wo es leider nicht klappt:

    #include<stdio.h>
    #include<stdlib.h>
    #include<string.h>
    #define BUFFER 255
    
    int main(void) {
       int i=0;
       char **rows;
       char buffer[BUFFER];
    
       //User kann beliebig viele Zeilen eingeben
       do {
          printf("Zeile eingeben: ");
          fgets(buffer, BUFFER, stdin);
    
          rows = (char **)realloc(rows,sizeof(char *));
          rows[i] = (char *)malloc(strlen(buffer)+1);
    
          strcpy(rows[i],buffer);      
          i++;  
    
       } while(strcmp(buffer,"\n") != 0); 
    
       //Hier die Anzahl der Elemente ausgeben
       printf("\n\nEs sind %d Elemente vorhanden.\n",sizeof(rows));   
       printf("Deine Eingabe war: \n",sizeof(rows));
       for(i=0;strcmp(rows[i],"\n")!=0;++i) {
          strtok(rows[i],"\n");
          printf("%s\n",rows[i]);
       }
    
       fflush(stdin);  
       getchar();
       return EXIT_SUCCESS;
    }
    

    Kann ich jetzt für den Fall irgendwie die Anzahl der Zeilen ermitteln, ohne eine Schleife bis zu \n durchlaufen zu lassen?
    Es könnte ja auch sein, dass man kein eindeutiges Endzeichen hat.

    P.S. Einfach i auszugeben, wäre möglich, aber evt. ist dieser Wert nicht dauerhaft vorhanden.

    MFG



  • Geht nicht.
    Aber was spricht denn dagegen bei der Eingabe einen eigenen Zähler mitlaufen zu lassen ? ( sag nicht Speicherverschwendung ).
    BTW da das das C++ Forum ist würde ich sowieso einen vector verwenden.
    Kurt



  • Oder du sorgst dafür das dein array immer ein element mehr hat und das letzte ist dann ein 0 zeiger.


Anmelden zum Antworten