Ich versuche, ein Befehlszeilenargument mit einer riesigen Länge (ungefähr 1000-2000 Zeichen) einzugeben und wann immer cin, getline, scanf oder irgendeine Art von Stream Leser, meine Ausführung hört auf. Ich verwende XCode Version 7.2.1 (7C1002). Das ist mein Code:C++ cin friert ein, wenn sehr große Strings mit null Whitespace eingegeben werden
int main() {
string S = "";
cin >> S;
cout << S;
return 0;
}
Dies ist meine Eingabe, die ich getestet habe. Ich kontrolliere nicht die Eingangslänge, die ich verwenden muss, wie es ist. Es ist keine Leerzeichen:
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
Hier wird die Code-Ausführung gestoppt wurde:
libsystem_kernel.dylib`__read_nocancel:
0x7fff8ff6407c <+0>: movl $0x200018c, %eax
0x7fff8ff64081 <+5>: movq %rcx, %r10
0x7fff8ff64084 <+8>: syscall
-> 0x7fff8ff64086 <+10>: jae 0x7fff8ff64090 ; <+20>
0x7fff8ff64088 <+12>: movq %rax, %rdi
0x7fff8ff6408b <+15>: jmp 0x7fff8ff5ebdd ; cerror_nocancel
0x7fff8ff64090 <+20>: retq
0x7fff8ff64091 <+21>: nop
0x7fff8ff64092 <+22>: nop
0x7fff8ff64093 <+23>: nop
EDIT: Ich habe das Hantieren und ich habe in der Lage gewesen, dass die oberen zu finden Grenze ist 1024.
[konnte nicht zum Reproduzieren] (https://ideone.com/X6LcQP) – Xirema
'einen Befehl Zeilenargument "ist kein Thema von Stream-I/O. Sie sollten argc/argv von main oder einige Betriebssystem-Funktion die Befehlszeile zurückgeben (beachten Sie eine Befehlszeile von 1000 Zeichen möglicherweise zu groß) –
Das funktioniert ziemlich gut für mindestens so eine Eingabe von 15kb ... (OSX). Oder habe ich etwas verpasst? –