string in 2 strings auseinandernehmen?



  • Hallo,

    ich habe ein kleines Problem mit strcpy und strcat. Normalerweise funktioniert das prima, nur diesmal will ich keinen String stückchenweise zusammensetzen, sondern auseinanderfummeln.

    Ich habe das aktuelle Datum im Format YYYYMMDD im String datum. Nun will ich einfach nur das Jahr im String datum_jjjj haben.

    So sieht meine Funktion dazu aus:

    int dc; // datacount, weil i schon benutzt
    int FIRST = 1; //erster Durchlauf?
    for (dc = 0; dc <= 3; dc++) {
    if (FIRST == 1) {
    printf("blubb\n");
    strcpy(datum_jjjj, datum[dc]);
    printf("bla\n");
    FIRST = 0;
    }
    else if (FIRST == 0) {
    strcat(datum_jjjj, datum[dc]);
    }
    }
    strcat(datum_jjjj, "\0");
    printf("datum_jjjj <%s>\n", datum_jjjj);
    [cpp]

    Das Programm sagt noch blubb, aber kein bla, damit liegt der Fehler bei strcpy.

    Bitte helft mir, ich seh da nich mehr durch 😞



  • char date[]="20080706";
    char year[5]={0};
    memcpy(year,date,4);
    


  • Hallo,

    ein Fall für strncpy:

    char datum_jjjj[5] = {0,}; /* wichtig, um abschliessendes Nullbyte zu erhalten */
    strncpy(datum_jjjj , datum, 4);
    

    MfG,

    Probe-Nutzer



  • _matze schrieb:

    char date[]="20080706";
    char year[5]={0};
    memcpy(year,date,4);
    

    manchmal geht auch das:

    *(uint32_t*)year = *(uint32_t*)date;
    

    ist aber nicht immer zu empfehlen.
    🙂



  • Probe-Nutzer schrieb:

    {0,}
    

    Warum eigentlich das Komma? Hab ich schon öfter gesehen, aber ich kann praktisch keinen Unterschied zu {0} erkennen.



  • _matze schrieb:

    Probe-Nutzer schrieb:

    {0,}
    

    Warum eigentlich das Komma? Hab ich schon öfter gesehen, aber ich kann praktisch keinen Unterschied zu {0} erkennen.

    Es gibt auch keinen Unterschied, ich verwende es einfach gern.

    Warum?

    Vielleicht nur weil es ungewöhnlich aussieht, oder irgendwie doch darauf hinweist, dass alle nachfolgenden Elemente auch initialisiert werden 🙂

    MfG,

    Probe-Nutzer



  • [quote="Probe-Nutzer"][quote="_matze"]

    Probe-Nutzer schrieb:

    Vielleicht nur weil es ungewöhnlich aussieht, oder irgendwie doch darauf hinweist, dass alle nachfolgenden Elemente auch initialisiert werden 🙂

    Hehe, interessant. Ich würde es, wenn ich's nicht wüsste, eher so interpretieren, dass eben nur das erste Element initialisiert wird. Nach dem Motto: rechts vom Komma steht nix, also wird da auch nix mehr initialisiert. Na ja... 🙂


Anmelden zum Antworten