Strings konkatenieren



  • Was in C++ so einfach ist, schein in C so schwer zu sein:
    Ich möchte eine Funtion schreiben, die zwei "Strings" zusammenfügt:

    char* add(char* str1, char* str2);
    

    Ich habe es schon mit strcat versucht, bekomme aber immer Speicherzugriffsfehler!
    Kann mir einer von euch helfen?

    Danke,
    Terk



  • char a[10];
    char b[10];
    char c[20];
    
    c[0]=0; // wichtig
    strcpy(a, "Hallo");
    strcpy(b, " World");
    strcar(c,a);
    strcat(c,b);
    

    Oder du musst den Speicher mit malloc reservieren, wenn du die Größe des Puffers erst zur Laufzeit nicht kennst.



  • char* add(char* str1, char* str2){
       while(*str1)
          str1++;
    
       while (*str1++=*str2++)
          ;
       return str1;
    }
    

    wobei beide strings nullterminiert sein müssen und str1 natürlich groß genug um str2 noch aufzunehmen..



  • Ein haeufiger Fehler ist, Puffer zu klein zu dimensionieren.

    char buf[8];
    sprintf( buf, "%d", val );
    

    das geht nur solange gut, wie "val" klein genug ist.

    #include <limits.h>
    char buf[8];
    sprintf( buf, "%d", INT_MAX ); /* peng! */
    

    Wenn man strcat() verwendet, sollte man daher genug Platz im Ergebnispuffer haben:

    #include <string.h>
    char buf[1024];
    strcpy( buf, str1 );   // str1 = kurzer string
    strcat( buf, str2 );   // str2 = kurzer string
    

    Oder man nimmt gleich snprintf(), dann kann nix schiefgehen:

    #include <stdio.h>
    char buf[1024];
    snprintf( buf, sizeof(buf), "%s%s", str1, str2 ); // laenge von str1/str2 egal
    

    snprintf() schneidet den Ergebnis-String rechtzeitig ab.



  • Power Off schrieb:

    Oder man nimmt gleich snprintf(), dann kann nix schiefgehen:

    Oder strncat(). Ist imho am besten geeignet dafür, wenn man wirklich nur zwei Strings zusammenkleben will.


Anmelden zum Antworten