String Kopieren



  • Hallo Zusammen
    Ich bin ein C++ neuling, und habe eine kleine Frage:

    Mit diesem Befehl, kann ich "const char" ans ende der string1 kopieren
    strcat(string1,"hallo");

    Ich möchte jedoch ans Ende des "String1" einen Buchstaben Kopieren
    die Variable Buchstabe ist vom Datentyp Char.

    strcat(string1,Buchstabe);

    Folgende zwei Felher entstehen:
    [C++ Fehler] versch_u.cpp(35): E2342 Keine Übereinstimmung des Typs beim Parameter '__src' ('const char *' erwartet, 'char' erhalten)

    [C++ Fehler] versch_u.cpp(35): E2034 Konvertierung von 'int' nach 'const char *' nicht möglich

    Was muss ich machen, um dies zu Realisieren?

    Danke für eure Hilfe!!!



  • void append_char(char *ziel, char c) {
      // hängt c an ziel an
      size_t end = strlen(ziel) + 1;
      ziel[end] = c;
      ziel[end+1] = 0;
    }
    


  • Einfacher (komplettes Programm):

    #include<iostream> //iostream includieren
    #include<string> //string includieren
    using namespace std; //Standard Namespace
    main() // Hauptfunktion (Datentyp void muss nicht angegeben werden)
    {
       string Str; //String-Variable deklareiren
       char Zeichen; //Char-Variable deklarieren
       int end; //Int-Variable deklarieren
    
       cout<<"String eingeben: "; //Eingabeaufforderung
       getline(Str); //Eingabe
       cout<<"Zeichen vergessen? "; //Eingabeaufforderung 2
       getchar(Zeichen); //Wartet auf ein Zeichen, das er in "Zeichen" einliest
    
       end=Str.length(); //end wird auf Groesse vom String gesetzt
       Str[end]=Zeichen; //Setzt hinter dem letzten Zeichen das eingegebene ein
    
       system("cls"); //Loescht den Bildschirm
       cout<<"Dein String lautet: "<<Str; //String wird ausgegeben
    
       getchar(); //Wartet auf ein Zeichen
    }
    

    [ Dieser Beitrag wurde am 26.05.2003 um 22:34 Uhr von Spieleprogrammierer editiert. ]



  • Darf man bei std::string einfach hinter den zur Verfügung stehenden Speicher schreiben? Ich würde doch eher Str += Zeichen; vorschlagen!



  • Spieleprogrammierer: nach std::string war nicht gefragt. Deine Umsetzung meiner Idee erzeugt zudem undefiniertes Verhalten, weil du über das Ende des Strings hinausschreibst. Zum Glück kommt es gar nicht soweit und compiliert gar nicht erst, da getchar zum einen nicht definiert und zum anderen falsch angewandt wurde.



  • ... und ebenso das getline in falscher manie 😉



  • Original erstellt von elise:
    ... und ebenso das getline in falscher manie 😉

    Wieso sollte getline falsch sein? Es liest halt auch Leerzeichen ein, na mein Gott. und übrigens bei std::string: Dann muss man halt hinschreiben:

    Str=Str+Zeichen;

    oder, wie es jemand schoin sagte:

    Str+=Zeichen;

    [ Dieser Beitrag wurde am 27.05.2003 um 08:33 Uhr von Spieleprogrammierer editiert. ]



  • versuch mal dein programm zu kompilieren...



  • die erste antwort auf deine frage solltest du auf keinen fall verwenden, weil sie falsch ist. erstens wurde nicht geprüft, ob der speicher bei ziel ausreicht und außerdem gehört das + 1 beim initialisieren von end weg.



  • Original erstellt von elise:
    versuch mal dein programm zu kompilieren...

    #include<iostream>
    #include<string>
    #include<cstdlib>
    using namespace std;
    main()
    {
       string Str;
       char Zeichen;
       cout<<"String: ";
       getline(Str);
       cout<<"\nZeichen: ";
       cin.get(Zeichen);
       Str+=Zeichen; //oder Str=Str+Zeichen
       system("cls");
       cout<<Str;
       getchar();
    }
    

    So wäre es jetzt korrigiert, und was ist daran falsch?



  • Original erstellt von Spieleprogrammierer:
    So wäre es jetzt korrigiert, und was ist daran falsch?

    Themenverfehlung



  • Original erstellt von Shade Of Mine:
    Themenverfehlung

    Nicht wirklich.



  • Original erstellt von Spieleprogrammierer:
    Nicht wirklich.

    Doch!
    Du sollst kein std::string verwenden sondern char* - so wie es der Frager wollte.

    Oder eklaerst du jemanden der nach dem Weg zu Bahnhof fragt, wie er zum Flughafen kommt?



  • Original erstellt von Shade Of Mine:
    *Doch!
    Du sollst kein std::string verwenden sondern char
    - so wie es der Frager wollte.

    Oder eklaerst du jemanden der nach dem Weg zu Bahnhof fragt, wie er zum Flughafen kommt?**

    Und ich sage nochmal nein, lies dir das Thema durch und achte genau auf die Fragestellung, in seinem Text kommt nämlich vor, dass er ein char* an einem STRING anhängen will, somit bist du hier anscheinend fehl am Platz



  • Original erstellt von <g>:
    die erste antwort auf deine frage solltest du auf keinen fall verwenden, weil sie falsch ist. erstens wurde nicht geprüft, ob der speicher bei ziel ausreicht

    das kann man nicht überprüfen. Die Funktion geht wie strcat, die dem Fragesteller anscheinend vertraut ist, davon aus, dass der Aufrufer weiß was er tut.

    **
    und außerdem gehört das + 1 beim initialisieren von end weg.**

    stimmt



  • NE er will ein char an eine Variable die sich "String1" nennt anhängen.
    Der Datentyp von "String1" ist unbekannt. Anzunehmen das er vom typ char * ist (strcat).

    Und als kleinen Tip: Mit mehr sachlichkeit kommst auf dauer weiter.



  • Hi!

    Nur weil er "string1" geschrieben hat, heißt das nochlange nicht das der datentyp String ist.

    ausßerdem arbeitet strcat laut definition ja eh mit char*

    char *strcat(char *dest, const char *src);
    


  • Original erstellt von Spieleprogrammierer:
    somit bist du hier anscheinend fehl am Platz

    Der Einzige der hier fehl am Platze ist, bist du mit deinen unverschämten und arroganten Kommentaren. Von dir hab ich bisher noch nix produktives gelesen. Nur Pöbeleien und Frechheiten.

    So, das musste mal gesagt werden.

    Original erstellt von Spieleprogrammierer:
    in seinem Text kommt nämlich vor, dass er ein char an einem STRING anhängen will,*

    Hättest du eine Ahnung von der Materie, hättest du festgestellt, dass der Fragesteller mit strcat implizit auf ein char-Zeiger hingewiesen hat, denn für den std::string gibts keinen strcat. Somit wärs eigentlich auch mehr ne C statt ner C++-Frage...

    soviel dazu.

    -junix



  • @chribu84: ist deine Frage damit eigentlich beantwortet? (mal vom Geflame hier abgesehen?)

    -junix



  • Naja, nix produktives kann man wohl eher nicht sagen, also sagen wir so, nur weil ich mich vielleicht geirrt habe, heißt das nicht gleich, dass bei mir nur Pöbeleien herauskommen, und zu deinen texten kann man auch nicht gerade sagen, dass du ein Engel bist. Und außerdem lasse ich mich, nur weil ich einmal was falsches sage, gleich als leihe bezeichnen, und das gleich von 5-6 Leuten hier, das finde ich nämlich frech.

    [ Dieser Beitrag wurde am 27.05.2003 um 09:11 Uhr von Spieleprogrammierer editiert. ]



  • Original erstellt von Spieleprogrammierer:
    Naja, nix produktives kann man wohl eher nicht sagen,

    Im Verhältnis Produktive/Unproduktive kommentare überwiegt klar letzteres.

    Original erstellt von Spieleprogrammierer:
    also sagen wir so, nur weil ich mich vielleicht geirrt habe, heißt das nicht gleich, dass bei mir nur Pöbeleien herauskommen,

    Nein die Pöbeleien kommen erst dann raus, wenn man dich auf deine Irrtümer aufmerksam macht. Dann wirst du ausfallend, statt zuerst mal nachzudenken ob der Kritiker nicht vielleicht recht hat.

    Original erstellt von Spieleprogrammierer:
    und zu deinen texten kann man auch nicht gerade sagen, dass du ein Engel bist.

    z.B.? Falls du dich auf obiges beziehst: Wie man in den Wald ruft, so schallt das Echo zurück. Ausserdem hab ich dich schon seit längerem im Auge.

    Original erstellt von Spieleprogrammierer:
    Und außerdem lasse ich mich, nur weil ich einmal was falsches sage, gleich als leihe bezeichnen, und das gleich von 5-6 Leuten hier, das finde ich nämlich frech.

    Hat auch niemand (ausser dir selbst und mir). Und ausserdem: Wenn man sich aufführt wie ein Leihe, dann wird man vielleicht auch als solcher tituliert. Damit musst du rechnen. Vielleicht solltest du dir zunächst mal überlegen, was an der Kritik wohl stimmen könnte. Und vielleicht solltest du vor der Kritik der etwas "älteren" User hier etwas mehr respekt aufbringen als bisher und vielleicht zweimal drüber nachdenken, ob die Kritik berechtigt ist oder nicht. HumeSikkins wird dich z.B. kaum korrigieren, wenn du recht hättest.
    Du solltest akzeptieren, dass es Leute gibt, die über Softwareentwicklung mehr wissen als du, und dass du auch von denen noch profitieren kannst.
    (Softwareentwicklung ist mehr als Codieren. Denn "Let's face it: any idiot can write code. Even teenaged hackers do a workmanlike job building (mostly) simple systems.". (Guter artikel. Unbedingt lesen!)

    So, nun hab ich genug von dem Offtopic-Führen dieses Threads. Ich bin dessen sozusagen überdrüssig. Wenn du zu meinem Post noch einen Kommentar hast, oder mit den anderen etwas diskutieren willst, eröffne einen neuen Thread im Neuigkeiten Forum oder wende dich per Mail an die betreffende Person (E-Mail steht im Profil)

    So long.

    -junix

    P.S: @all Lasst den Streit jetzt dabei bewenden, sonst geht chribu84' Thread noch ganz kaputt und damit ist dann niemandem geholfen. )o:

    [ Dieser Beitrag wurde am 27.05.2003 um 09:34 Uhr von junix editiert. ]


Anmelden zum Antworten