[C/C++] C++ Zeichen anhängen

Dieses Thema im Forum "Programmierung & Entwicklung" wurde erstellt von KamiKatze88, 4. März 2010 .

Schlagworte:
  1. 4. März 2010
    C++ Zeichen anhängen

    Hallo ich versuche nun seit Stunden mittels der Funktion Strcat einzelne Zeichen aus einem String auszulesen und an einen anderen anzuhängen.

    Code:
    char Datum[10]
    char Dat[10]
    strcat(Dat,Datum[1]); 
    
    Ziel ist es bestimmt Zeichen aus Datum auszulesen und in den char Array einzuspeichern
     
  2. 4. März 2010
    AW: C++ Zeichen anhängen

    Naja zunächst einmal initialisierst du deine char arrays nie und belegst sie daher mit keinem wert. So wie dus oben kurz gepostet hast, wirds nicht ausreichen.
    Strcat hängt text an einen bisherigen string, das ist eine folge von chars gefolgt von einem '\0' Byte. Wenn dein zielbuffer nicht vorinitialisiert ist, wird strcat keinen "endpunkt" des strings finden und es wird nix kopieren (bzw an die falsche stelle, wenns zufällig irgendwo in deinem Speicher nen Nullbyte findet).

    Wenn du nur bestimmte Zeichen rausschneiden sollst, versuchs doch mal mit strcpy (bzw strncpy glaub ich) oder gleich mitm memcpy (dabei musst du allerdings beachten das '\0'-Byte per Hand am ende zuzufügen)
     
  3. 4. März 2010
    AW: C++ Zeichen anhängen

    danke für die schnelle Antwort, also den bisherigen String hatte ich wirklich nicht initialisiert.
    Datum wird aber durch die Eingabe bereits initialisiert, habe ich vorher leider nicht mitkopiert.
    i-wie nimmt der mir das Bestimmte Zeichen aus Datum nicht raus
    Code:
    char Dat[10]="";
    cout<<"Bitte das Datum im Format TT.MM.JJJJ eingeben: ";
    char Datum;
    cin>>Datum;
    strcpy(Dat,Datum[1]); 
    cout<<Dat;
    wenn ich so compilieren will kommt folgender Fehler :
    invalid types `char[int]' for array subscript

    Vll sollte ich mal grundsätzlich erklären was ich vorhabe, also mithilfe diesem Programm will ich meine Arbeitszeiten erfassen, in einer .txt datei speichern und so meine Überstunden auf einen Blick zu haben. Nun will ich die Eingabe von dem Datum in einen string speichern, nur dachte ich mir eben ohne den Punkte in der Datumsangabe.
     
  4. 4. März 2010
    AW: C++ Zeichen anhängen

    c oder c++ ?

    weil mit c++ kannst du "strings" verwenden und da kannst du dann easy mit der methode "append" zeichen hinzufügen

    zu deinem code:
    Code:
    char Dat[10]="";
    ="" brauchst du nicht.
    Code:
    char Datum;
    cin>>Datum;
    
    char Datum[10] !

    in c++ würde das so aussehen:
    Code:
    string dat, datum;
    cout << "Bitte das Datum im Format TT.MM.JJJJ eingeben: ";
    cin >> datum;
    
    dat.append(datum[1]);
    cout << dat; 
     
  5. 4. März 2010
    AW: C++ Zeichen anhängen

    Am einfachsten wäre es den User einfach das Datum ohne Punkt eingeben zu lassen

    Titel: "C++ Zeichen anhängen" ;D


    Zu deinem Ursprungsproblem:
    Code:
    char Dat[10]="";
    cout<<"Bitte das Datum im Format TT.MM.JJJJ eingeben: ";
    char Datum;
    cin>>Datum;
    strcpy(Dat,Datum[1]); 
    cout<<Dat;
    1. Liest du mit cin>>Datum nur einen einzelnen Buchstaben ein (Datum ist eine "einfache" char-Variable)
    2. Willst du mit "Datum[1]" auf ein Element eines "nichtvorhandenen" Arrays zugreifen

    Hab's mal schnell geändert:
    Code:
     char Dat[10] = { 0 };
     cout<<"Bitte das Datum im Format TT.MM.JJJJ eingeben: ";
     char Datum[10];
     cin>>Datum;
     strncpy(Dat,&Datum[1], 1);
    Willst du alle Punkte raus löschen solltest du dir ne eigene Funktion schreiben oder besser norch , wie murdoc gesagt hat, die string klasse verwenden

    mfg
    Xxsourexx
     
  6. 4. März 2010
    AW: C++ Zeichen anhängen

    Müsste er denn nicht auch eine Arraygröße von 11 wählen? Also wegen dem 0x00 am Ende. C/C++ ist bei mir schon ne weile her, bin mir da nicht mehr so ganz sicher. Wär nett wenn mich jemand aufklären könnte
     
  7. 4. März 2010
    AW: C++ Zeichen anhängen

    yopp, hast recht! Terminierende Null muss auch noch angehängt werden - ist mir nicht aufgefallen ^^

    Okey, nach Murdocs kommentar bin ich auch verwirrt xD

    Sicher das 10 reicht? Ich hab atm keinen Debugger sonst würd ich mal grad nachschaun :s
     
  8. 4. März 2010
    AW: C++ Zeichen anhängen

    char datum[10] geht von 0 bis 9, Index 10 existiert nicht und d.h. es ist kein Platz mehr für das Null-Byte vorhanden. Es muss char datum[11] sein!
    Kann schon sein, dass es zufällig auch mit [10] funktioniert, aber damit zerhaut man sich den Stack und es dauert ewig bis man so einen Fehler später findet.
     
  9. 4. März 2010
    AW: C++ Zeichen anhängen

    shit stimmt, sorry ^^

    war ein wenig verwirrt. char[11] is natürlich richtig
     
  10. 5. März 2010
    AW: C++ Zeichen anhängen


    Dankeschön mit deiner Lösung funktionierts so wie ich es haben wollte.
    Allerdings würde mich noch interessieren warum du mit
    Code:
    char Dat[10]={0};
    Das erste Feld mit 0 initalisierst.
    Dann würde ich ich noch gerne wissen warum ich die Adresse von Datum übergeben muss und nicht nur die Variable.
    Und was ich noch nicht verstehe ist der 3 Parameter, also die 1
    Code:
    strncpy(Dat,&Datum[1],1);
    Stimmt ich brauche wirklich 11 Felder, hab eigentlich gewusst das die Terminierende 0 am Ende sein muss.
    Der Vorschlag von Murdoc mit der String Klasse hat bei mir nicht funktioniert.... :|
     
  11. 5. März 2010
    AW: C++ Zeichen anhängen

    mit { 0 } belegst du alle elemente mit 0

    der dritte parameter in strncpy legt fest wie viele zeichen kopiert werden sollen
    siehe: http://www.cplusplus.com/reference/clibrary/cstring/strncpy/

    die adresse wird übergeben, weil Datum[1] auf einen char zeigt, die funktion erwartet aber einen pointer.
     
  12. Video Script

    Videos zum Themenbereich

    * gefundene Videos auf YouTube, anhand der Überschrift.