char* char append



  • Hallo liebe Gemeinde,

    Eine kurze, kleine Frage:

    char* test = "abc";
    // von mir aus auch
    char[] test = "abc";
    
    char ch 'd';
    

    Wie weise ich jetzt der char* variable test, das char element ch zu?
    ich finde hier einfach nichts über google.
    strcpy() ist wohl nicht korrekt?

    Vielen Dank für die Hilfen



  • Du willst anhängen, ja? Mach's z.B. mit sprintf!

    char[] test = "abc";
    char ch 'd'; 
    
    char newString[256];  //nimm ein neues char-Array, wenn du an test was dranhängst, schreibst du über die Feldgrenze hinaus => böse
    sprintf(newString,"%s%c",test,ch);
    


  • Vielen Dank

    char ch = 'a';
    char test[256];
    sprintf(test, "%c", ch);

    Funktioniert bei mir nicht => Exception.
    wenn ich anstatt
    char test[256]
    char* test = "";
    mache funktionierts.

    Aber ich will auch, dass das ganze in einer Schleife dem test immer ein a appended also in der art:

    schleife
    {
      appende ch zu test;
    }
    

    Danke für Anregungen



  • Also erstens solltest du bitte Code immer per C&P hier posten und nicht abschreiben (denn da sind ja mehrere Syntax-Fehler drinnen).

    Zweitens sollte dieser Code hier

    char test[] = "abc";
    	char ch = 'd';
    
    	char newString[256];  //nimm ein neues char-Array, wenn du an test was dranhängst, schreibst du über die Feldgrenze hinaus => böse
    	sprintf(newString,"%s%c",test,ch);
    

    problemlos funktionieren (hab ihn auch gerade ausprobiert) und den String "abcd" ergeben. Welche Exception kommt denn da bei dir und wie genau sieht dein Code aus (bitte das Original posten!)?

    Und drittens: sieh dir mal dieses kleine Beispiel an:

    char str[256]={0};
    for(char c='A';c<'Z';++c) {
    	sprintf(str,"%s%c",str,c);
    }
    

    Hier wird ein leerer String erzeugt und in einer Schleife immer ein weiteres Zeichen angehängt. So könntest du es also machen. strcat wäre auch noch eine Möglichkeit (ist wahrscheinlich schneller, weiß nicht, ob es bei dir wirklich auf Geschwindigkeit ankommt). In jedem Fall musst du aber darauf achten, dass du nicht über Feldgrenzen hinausschreibst! Je nachdem, was genau du vorhast, könnte auch ein dynamisches Array nötig werden (falls du nicht weißt, wieviele char's du maximal anfügen willst).

    EDIT: Warte mal, ich weiß gar nicht, ob das sprintf-Schleifen-Beispiel so in Ordnung ist. Da wird ja der String selbst in sich hineinkopiert. Das könnte ein typischer Fall von undefiniertem Verhalten sein. Weiß jemand was Genaues?

    EDIT2: Programmierst du eigentlich in C oder C++? Denn C++ bietet ja die Klasse std::string, die selbst ihren Speicher verwaltet und auch prima Operatoren überladen hat, um solche coolen Sachen wie "str+='x'" zu machen. Damit wäre anhängen also recht einfach und nicht so frickelig (ich war die ganze Zeit davon ausgegangen, dass du C programmierst; sah halt so aus).



  • 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.



  • char ch = 'a';
    char test[256] = "abc";
    
    size_t const s = strlen(test);
    test[s] = ch;
    test[s+1] = '\0';
    


  • ich würds mit strcat machen,
    ein array mit char [2] anlegen,
    den char in array[0] stellen,
    array[1] = 0; ja Zahl, da ein char auch ein int ist
    strcat(string,array); und gut iss



  • frag mich ja ob das ANSI C werden soll...

    char[] test = "abc";
    

    wenn ja dann könnte man das natürlich wenn man nur ein char anhängt auch per zeiger lösen

    #include <stdio.h>
    #include <string.h>
    
    int main(void) {
      char test[] = "abc";
      char newString[256]={0};
      strcat(newString,test);
      char *buffer = newString + strlen(newString);
      char c;
      for(c='A';c<='Z';c++) {
        *buffer++ = c;
      }
      printf("%s",newString);
      return 0;
    }
    

    lg lolo



  • In ANSI-C ist das klar geregelt:
    --> strcpy() kopiert einen String auf einen anderen.
    --> strcat() hängt einen String an einen anderen an.
    Wo ist das Problem? In ANSI-C müssen die Strings mit ausreichender Länge deklariert sein. Die Standardklasse string von C++ nimmt noch mehr ab, doch man braucht sie nicht in allen Fällen. Das ganze ist Grundwissen der Programmierung!
    daddeldu :p



  • bitte snprintf und strncat verwenden. die n in den namen sind wichtig.


Log in to reply