2017-06-28 2 views
-3

Ich möchte unbegrenzte Zeichen erhalten, tatsächlich habe ich erstellt char *, ich benutze cin dafür, und ich möchte es in Zeichenfolge ändern. Ich weiß nicht die Länge der Eingabe, die Benutzer eingeben, also habe ich diese Lösung für mich selbst gemacht. Kann mir jemand sagen plz, wie man ein char * bekommt, ohne die Größe der Eingabe zu wissen und in eine Zeichenfolge umzuwandeln. danke.Erhalten unbegrenzte Char in Cpp

+6

Warum benutzen Sie nicht einfach 'std :: string'? – UnholySheep

+0

Sie könnten eine verknüpfte Liste erstellen. Aber das ist im Laufe der Zeit viel weniger effizient als das, was std :: string tut, das einen Puffer enthält, der bei einer anfänglichen Größe beginnt, und dann einen größeren Puffer neu zuweist, wenn er zu groß wird. – AndyG

+0

Eigentlich möchte ich eine andere Lösung, keine Zeichenfolge, ich möchte mein Problem lösen, unbegrenzte Char zu bekommen, gibt es sowieso außer Linkedlist? – Zahra

Antwort

5

Da es C++ ist. Verwenden Sie einfach std::string

Wenn Sie wirklich char* Blick auf this topic

2

verwenden müssen stattdessen eine char * verwenden, verwenden Sie die Standard-Bibliothek.

#include <string> 
    #include <iostream> 

    int main() 
    { 
     std::string data; 

     std::getline(std::cin, data); 

     std::cout << data << '\n'; 
    } 

Dies wird eine Zeichenfolge beliebiger Länge lesen (zumindest, bis eine Neuen-Zeile eingegeben wird, die in data aufgenommen wird nicht) und dann ausdrucken.

Sie können auch den Status std::cin überprüfen, um zu testen, ob Fehler aufgetreten sind.

+0

Vielen Dank @Peter, aber eigentlich suche ich nach dem Weg, den ich Char bekommen kann. danke für Ihre Antwort! – Zahra

+1

@ Zahra - Lesen Sie die Dokumentation für 'std :: string'. Es hat Mitgliedsfunktionen, die Zugriff auf die zugrundeliegenden Daten bereitstellen ..... als einen Zeiger auf (das erste Element von) einem dynamisch zugewiesenen Feld von "char", d. H. Ein "const char *". Wenn Sie versuchen, mit einem rohen Zeiger (anstelle von "std :: string") zu arbeiten, müssen Sie die Speicherzuweisung manuell verwalten und (ebenso wichtig) die Zuweisung aufheben, wenn Sie sie nicht mehr benötigen. – Peter