char variablen



  • hi.
    Ich brauche für ein Programm einen vom Benutzer eingegebenden Text in einer char-Variable. Aber da ich vorher nicht weiß, wie lang der eingegebende Text ist, kann ich ja schlecht einfach ein grenze setzen. Ich hatte erst überlegt, dass der Benutzer das ganze ind einen string eingibt. ich die länge berechne und dann den string in des char-array schreibe. aber irgendwie geht das nicht. Bei den funktionen, die ich kenne kann man nur char-längen berechnen, was ich ziemlich komisch finde.
    zumindest bekomm ich es nicht hin. liegt vielleicht daran, dass ich etwas aus der übung gekommen bin. hab schon länger net mehr programmiert. aber egal. könnt ihr mir helfen?

    danke schonmal



  • Hallo,

    char a;

    und Text passt einfach nicht zusammen.

    Du meinst char *a[]?

    Eine Möglichkeit wäre dies:

    #include <iostream>
    #include <string>
    using namespace std;
    
    int main(){
        string a;
        cin >> a;
        size_t size = a.size();
        char *b;
        b = new char[size];
        int i = 0;
        for(; i < size; i++){
            b[i] = a[i];
        }
        b[size] = '\0';
    }
    

    MFG winexec*



  • @winexec* char *a[]? ist ein Array aus Zeigern auf char
    sowas meintest Du aber nicht! 🙂



  • Hallo,

    Meinen tue ich es schon. Ich war nicht sicher wie er es meinte, also hab ich einmal diese Möglichkeit genommen 😃 .

    MFG winexec*



  • hi.

    ich kann mir zwar denken, wozu die einzelnen befehle sind. Aber fände ich es doch cool, wenn du das ganze mit komentaren machen würdest. damit ich auch mir nichts falsches beibringe 😉
    aber danke für die schnelle antwort. genau so wollte ich das. sorry, wenn ich es etwas scheiße beschrieben habe.



  • Hallo,

    #include <iostream>    
    #include <string>       //für size und string
    using namespace std; 
    
    int main(){ 
        string a; 
        cin >> a;      //für die Größe;
        size_t size = a.size(); //size von a bestimmen
        char *b;  
        b = new char[size];   //zeiger zeigt auf die speicheradresse von size-vielen chars
        int i = 0; 
        for(; i < size; i++){ 
            b[i] = a[i];  //stringinhalt wird kopiert
        } 
        b[size] = '\0'; //hänge ein 0-Zeichen an
    }
    

    Warum eigentlich so umständlich. Nutze doch string.

    MFG winexec*



  • Das ist auch reichlich umständlich und zudem noch falsch.
    Das hier

    b = new char[size - 1];
    

    sollte wohl eher so heissen

    b = new char[size + 1];
    

    Warum eigentlich nicht strncpy?
    Der Rat, nur string zu benutzen, ist aber der besser.



  • wieso unbedingt char?
    string geht wohl nicht?

    oder zumindest:

    string text;
    cin>>text;
    
    wasauchimmergemachtodergebrauchtwird = text.c_str();
    


  • Hallo,

    Ich habe nicht an das 0-Zeichen gedacht.

    #include <iostream>
    #include <string>       //für size und string
    using namespace std;
    
    int main(){
        string a;
        cin >> a;      //für die Größe;
        size_t size = a.size(); //size von a bestimmen
        cout << size;
        char *b;
        b = new char[size];   //zeiger zeigt auf die speicheradresse von size-vielen chars
        int i = 0;
        for(; i < size; i++){
            b[i] = a[i];  //stringinhalt wird kopiert
        }
        b[size] = '\0'; //hänge ein 0-Zeichen an
    }
    

    MFG winexec*



  • Wie ser1al schon zeigte:
    

    #include <string>
    using namespace std;

    int main(){

    char* textPtr;
    string text;
    cin >> text;

    textPtr = text.c_str();
    }
    [cpp]
    Kopieren braucht man nicht, man hat ja jetzt einen Zeiger auf das nullterminierte char-Array.
    mfg



  • winexec* schrieb:

    Hallo,

    Ich habe nicht an das 0-Zeichen gedacht.

    Dann denk doch endlich mal daran 😉 Dein Code benötigt ein "b=new char[size**+1**];", sonst bekommst du Zugriffsprobleme (string zählt das '\0' nicht mit).



  • Hallo,

    Sehe ich das falsch oder reserviere ich mit new char[size] nicht schon size + 1 Elemente 🙂 ?

    MFG winexec*



  • Das siehst Du falsch.



  • Hallo,

    Ich glaub ich muss mich mal ausschlafen gehen:

    Eingabe: hallo(5)

    new:ptr = new char[5] { 0,1,2,3,4,5 } (6)

    ptr[5](6)

    MFG winexec*



  • du hast die nullterminierung vergessen, die braucht auch noch platz (1) \0



  • char a[5]-->a[0];a[1];a[2];a[3];a[4]
    oder nicht?
    und a[4] geht für \0 drauf.
    also hat man noch 4 stellen frei.

    wenn man 6 Stellen haben will muss man char a[7] machen. da a[6] für \0 drauf geht.



  • ja also brauch man für das wort h[0]a[1]l[2]l[3]o[4]\0[5] eine größe von 6 🙄



  • richtig 👍


Anmelden zum Antworten