Das eigentliche Problem hier ist nicht, dass Sie nicht lesen können oder nicht können Die Zeichenfolge wird gedruckt, wenn Sie in nicht zugewiesenen Speicher schreiben. operator[]
, das ist, was Sie verwenden, wenn Sie etwas wie a[i]=ch
tun, macht keine Art von Grenzprüfung und damit verursachen Sie undefiniertes Verhalten. In meiner Maschine wird beispielsweise nichts gedruckt.
Kurz gesagt, müssen Sie sicherstellen, dass Sie Platz haben, um Ihre Zeichen zu schreiben. Wenn Sie sicher sind, dass Sie 5 Zeichen lesen werden (und eine \ 0 am Ende hinzufügen, so dass es 6 in der Länge), könnten Sie so etwas tun:
std::string a(6, '\0')
Wenn Sie unsicher sind, wie viele Zeichen, die Sie lesen werden, std::string
ist bereit, Speicherplatz nach Bedarf zuzuweisen, aber Sie müssen std::push_back
verwenden, um ihm eine Chance zu geben, dies zu tun. Ihre Schleife Inhalt wäre so etwas wie:
cin >> ch;
a.push_back(ch);
Wenn Sie unsicher sind, wo das std::string
Objekt herkommt (wie in dieser Bibliothek Code ist, der eine std::string
als Argument akzeptiert, könnten Sie at(i)
(zB a.at(i) = ch
statt a[i] = ch
), die eine Ausnahme auslöst, wenn es außerhalb des zulässigen Bereichs.
https://stackoverflow.com/questions/1452721/why-is-using-namespace-std-considered-bad-practice – ChemiCalChems