Abeschnittener String in Konsole
-
Also ich übertrage mit Hilde der Winsocks einen char[256] auf einen anderen Pc in einen anderen char[256]. Die Variable wird an der Qulle per cin durch eine Konsole gefüllt. Un da fangen die Probleme an. Wenn ich jetzt schreibe "HalloWelt". Wird alles übertragen... Wenn ich jetzt aber "Hallo Welt" schreibe wird nach dem Leerzeichen aufgehört und es kommt nur das Hallo an.
Ich sehe jetzt 2 mögliche Fehlerwullen, aber leider keine Lösung.
1.Möglichkeit: cin nimmt nur bis zum Leerzeichen auf
2.Möglichkeit: Bei der Übertragung wird nach dem Leerzeichen abgeschnitten. Also würde es hier keinen 0 Terminator geben...Also weiß einer woran es leigt wie ich es lösen kann.
Vorschläge wie "immer einen Punkt setze und dann später wieder erstzen" sind mir jetzt ein wenig aufwendig...
Bin dankbar für jede Hilfe
-
std::getline
-
Danke. Das scheint zwar im Prizinp das zu sein was ich suche, aber jetzt wartet das Programm ncihtmehr bis ich was eingebe und enter drücke sondern nimmt einfach das was in der Zeile steht, wenn das getline kommt.^^
-
Habe jetzt einfac noch ein std::cin vor das std::cin.getline(x,y) gesetzt. Das ist zwar nicht das wahre, weil er dann natürlich erstmal wieder das erste Wort abschnediet, aber jetzt kann man es so benutzen:
Dummy Hallo Welt. Dann kommt das Hallo Welt.^^
Also vielen DAnk. Wenn es da noch eine elegantere Lösung gibt bin ich gerne offen für Vorschläge

-
std::getline(cin, meinStringBuffer);
-
z5454hjdt schrieb:
std::getline(cin, meinStringBuffer);
Also tut mir Leid, aber das verstehe ich cniht. Ich kann ja wohl kaum als erstes Paramter cin hinschreiben oder?^^
Kann vllt einfach jemand eine Zeile psoten, die wartet ich schreibe was rein ich drücke neter und dann wird es halt in die Variable geschoben?
-
doch man kann und muss da cin reinschreiben (cin ist nur ein objekt)
oder so:
char buffer[256]; // das ist dein speicher // ... hier passiert was tolles cin.getline(buffer, 256);oder so wie von <string>
-
helferlein schrieb:
doch man kann und muss da cin reinschreiben (cin ist nur ein objekt)
oder so:
char buffer[256]; // das ist dein speicher // ... hier passiert was tolles cin.getline(buffer, 256);oder so wie von <string>
Also danke für die vielen Hilfen,aber ich muss es wohl aufgeben!
Ich hbae jetzt: std::cin.getline(buf2,256);
Aber er rennt da einfach durch... Also wenn ichstd::cout<<"xxx"; std::cin.getline(buf2,256); std::cout<<"xxx";habe, dann wird ohne auf Eingaben zu warten einfach 2x "xxx" ausgegeben.
Ich dachte ich probiere mal mit der Konsole rum, aber ich glaube ich gehe lieber weiter mit Windoows-Fenster arbeiten....Aber danke an alle. Wenn noch jemandem etwas dazu einfällt kann er es gerne schreiben, ich sehe nachher nochmal rein

Danke
-
Ich weiss ja nicht warum du im Winapi Forum postes, das klingt mir mehr nach Win32 Konsole. Winapi technisch würde ich es folgendermasen machen: Ein Dialogfenster mit einem Button und einem Editfeld. Im Editfeld schreibst du etwas und mit dem Button erledigts du das Auslesen und das verschicken des Strings.
-
winapi noob schrieb:
Ich weiss ja nicht warum du im Winapi Forum postes, das klingt mir mehr nach Win32 Konsole. Winapi technisch würde ich es folgendermasen machen: Ein Dialogfenster mit einem Button und einem Editfeld. Im Editfeld schreibst du etwas und mit dem Button erledigts du das Auslesen und das verschicken des Strings.
Es soll mit der KOnsole gemacht werden. Das ist ja grade die Schwierigkeit daran. Im WinAPI Forum ist es, weil ich zuerst dachte(s.o.) es läge an den Winsocks
-
KonsolenFehler schrieb:
Es soll mit der KOnsole gemacht werden. Das ist ja grade die Schwierigkeit daran. Im WinAPI Forum ist es, weil ich zuerst dachte(s.o.) es läge an den Winsocks
Ok dann nimm doch scanf und setzt in die eckigen Klammern alle Zeichen die als lesbar angesehen werden a-z 0-9 A-Z Leerzeichen und was du sonst noch so brauchst, hier mal ein Beispielcode der sofort läuft
char zeile[256], memset(&zeile, 0, sizeof(zeile)); scanf("%[abcdefghijklmnopqrstuvwxyz0123456789 ABCDEFGHIJKLMNOPQRSTUVWXYZ]", &zeile); printf(zeile);