Strings in C / Zuweisungsproblem



  • Hallo zusammen,

    warum kann der Compiler die Strings nicht einfach in die char-Matrix einspielen?
    Wo liegt mein Denkfehler?

    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    
    int main() {
        char SQLsignalFullSet[2][64];
    
        SQLsignalFullSet[0] = "`SIGNAL_00`";
        SQLsignalFullSet[1] = "`SIGNAL_01`";
    
        printf("%s",SQLsignalFullSet[1]);
    
        return EXIT_SUCCESS;
    }
    

    Danke. Grüße, Kevin



  • C hat keinen Datentyp für Strings. Strings sind somit char arrays. Arrays kann man erstmal nicht einfach mit = zuweisen. Möglich wäre:

    1: EDIT: const

    const char *bla[2];
    bla[0] = "lol";
    bla[1] = "sdf";
    

    2:

    char SQLsignalFullSet[2][64];
    
    strcpy(SQLsignalFullSet[0], "`SIGNAL_00`");
    strcpy(SQLsignalFullSet[1], "`SIGNAL_01`");
    

    Und nächste mal am besten gleich schreiben was für ein Fehler denn auftaucht. (Compiler Fehlermeldung zB.)



  • Hallo,

    ich hab´s mit sprintf gelöst. Hab ich da Performanceeinbußen ggü. strcpy?

    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    
    int main() {
        char SQLsignalFullSet[2][64];
    
        sprintf(SQLsignalFullSet[0],"`SIGNAL_00`");
        sprintf(SQLsignalFullSet[1],"`SIGNAL_01`");
    
        printf("%s",SQLsignalFullSet[1]);
    
        return EXIT_SUCCESS;
    }
    


  • lovepulse schrieb:

    ich hab´s mit sprintf gelöst. Hab ich da Performanceeinbußen ggü. strcpy?

    Ist dein Programm denn zu langsam, so dass du dir Gedanken über Optimierungen machen musst?



  • Für konstante Werte wäre folgendes einfacher und auch performanter:

    int main() {
        const char *SQLsignalFullSet[] = {"`SIGNAL_00`","`SIGNAL_01`"};
    
        printf("%s",SQLsignalFullSet[1]);
    
        return EXIT_SUCCESS;
    }
    


  • cooky451 schrieb:

    1:

    char *bla[2];
    bla[0] = "lol";
    bla[1] = "sdf";
    

    Hui, da sollte aber const char * stehen.

    lovepulse schrieb:

    Hallo,

    ich hab´s mit sprintf gelöst. Hab ich da Performanceeinbußen ggü. strcpy?
    }[/cpp]

    Wahrscheinlich hast du schon leichte Performanceeinbußen. Warum nimmst du nicht einfach strcpy()?



  • sprintf muss beim kopieren noch auf die Formatangaben (%s ...) achten.
    Deshalb bekommst du Probleme wenn in deinem String ein '%' auftaucht. Das versucht dann sprintf zu interpretieren.



  • wxSkip schrieb:

    Hui, da sollte aber const char * stehen.

    Huch, wie konnte das denn passieren. Verdammt, wie war das mit dem Katzen-tötenden Programmiergott? 😃



  • cooky451 schrieb:

    wxSkip schrieb:

    Hui, da sollte aber const char * stehen.

    Huch, wie konnte das denn passieren. Verdammt, wie war das mit dem Katzen-tötenden Programmiergott? 😃

    Den Witz kenne ich noch nicht, den musst du mir noch erzählen...


Anmelden zum Antworten