prob mitz fprintf



  • Hi leutz,

    ich habe folgendes prob mit fprintf:

    wenn ich fprintf(stdout,"%s\n",info[1]);
    oder fprintf(stdout,"%s\n",info[i]); in einer Schleife

    aufrufe bekomme ich die Fehlermeldung Speciherzugriffsfehler.

    Das array info hat 5 inhalte, deshalb ich es in der header datei mit char info[5] initialisiert.

    in meiner main funktion werden die werte dem array zugewiesen, sobald ich aber dann die funktion usage in meinem prog. aufrufe bekomme ich die obigen fehlermeldungen.

    Wenn ich aber fprintf(stdout, "blabla"); aufrufe gehts.

    woran liegt das?



  • Willst du ein Array von 5 Strings oder von 5 Zeichen?



  • das info array:

    char info[5];
    int main(int argc, char *argv[]) {
        info[0] = (char)"-i     IP-Adr. der Dbox";
        info[1] = (char)"-p     Port default 80";
        info[2] = (char)"-vPid  Video Process id";
        info[3] = (char)"-aPid  Audio Process id";
        info[4] = (char)"-o     Stream filename";
        info[5] = (char)"-h     Hilfe";
    }
    


  • So wird das nix!
    In deinem Beispiel reservierst du ein Chararray mit Platz für 5 Zeichen.
    Ausserdem kann man Strings nicht mit = zuweisen, sowas erledigt strcpy.
    Für dein Vorhaben benötigst du ein 2 dimensionales char Array mit
    Zeilenhöhe 5
    und
    Spaltenbreite Anzahl der Zeichen des längsten Satzes + '\0'!

    Ein Beispiel soll das verdeutlichen!

    #include <stdio.h>
    #include <string.h>
    
    int main(void)
    {
    	char matrix[5][6];
    	int i;
    
    	strcpy(matrix[0],"one");
    	strcpy(matrix[1],"two");
    	strcpy(matrix[2],"three");
    	strcpy(matrix[3],"four");
    	strcpy(matrix[4],"five");
    
    	for (i = 0; i < 5; i++)
    		fprintf(stdout,"%s\n", matrix[i]);
    
    return 0;
    }
    

    Lies dir am besten nochmal ein Tut zu diesem Thema durch!



  • Dieser Thread wurde von Moderator/in nman aus dem Forum Linux/Unix in das Forum ANSI C verschoben.

    Im Zweifelsfall bitte auch folgende Hinweise beachten:
    C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?

    Dieses Posting wurde automatisch erzeugt.



  • so muß es aussehen:

    char *info[5]; 
    int main(int argc, char *argv[]) { 
        info[0] = "-i     IP-Adr. der Dbox"; 
        info[1] = "-p     Port default 80"; 
        info[2] = "-vPid  Video Process id"; 
        info[3] = "-aPid  Audio Process id"; 
        info[4] = "-o     Stream filename"; 
        info[5] = "-h     Hilfe"; 
    }
    

    char info[5] reserviert nur ein einzelnes zeichen pro feld. merke: in c ist ein string ein char* und kein char 😉



  • Konfusius schrieb:

    so muß es aussehen:

    char *info[5]; 
    int main(int argc, char *argv[]) { 
        info[0] = "-i     IP-Adr. der Dbox"; 
        info[1] = "-p     Port default 80"; 
        info[2] = "-vPid  Video Process id"; 
        info[3] = "-aPid  Audio Process id"; 
        info[4] = "-o     Stream filename"; 
        info[5] = "-h     Hilfe"; 
    }
    

    char info[5] reserviert nur ein einzelnes zeichen pro feld. merke: in c ist ein string ein char* und kein char 😉

    eher so:

    const char *info[6]; 
    int main(int argc, char *argv[]) { 
        info[0] = "-i     IP-Adr. der Dbox"; 
        info[1] = "-p     Port default 80"; 
        info[2] = "-vPid  Video Process id"; 
        info[3] = "-aPid  Audio Process id"; 
        info[4] = "-o     Stream filename"; 
        info[5] = "-h     Hilfe"; 
    }
    


  • nur, wenn wir hier in der c++-abteilung wären.



  • Konfusius schrieb:

    nur, wenn wir hier in der c++-abteilung wären.

    erklaere.



  • Konfusius schrieb:

    nur, wenn wir hier in der c++-abteilung wären.

    😕 was meinst du denn damit? Was hat da C++ damit zu tun, und wir sind übringens im ANSI C Forum.

    Das const ist vielleicht nicht notwenig, es gibt Compiler, die da nicht meckern, bzw. Warnungen ausgeben. Aber die 6 am "info[6]" ist notwenid, da es keine 5 sondern 6 Datensätze sind.



  • danke es funzt nu.


Anmelden zum Antworten