【发布时间】:2020-03-04 00:35:51
【问题描述】:
我不明白为什么char *ptr = new char[7] 不会截断大于 7 个字符的数据输入。还有为什么八位 char c[7] 会让我输入超过 6 个字符(但在将其归因于超过 6 个字符的文字值时会出错)。
使用malloc function 对我来说似乎有点困难,这就是我不想使用它的原因。我宁愿暂时不要使用它。
char qs[7] = "1234567"; //error too many
char qs2[7];
cin >> qs2; //input 123456789
cout << qs2; //out same as input, expecting 123456
char *qs3 = new char[7];
cin >> qs3; //input 123456789
cout << qs3; //out same as input, expecting 123456
【问题讨论】:
-
这是未定义的行为,并不能保证任何特定的结果。它可能会打印
123456789,它可能会打印123456,它可能会打印其他东西,它可能会挂起、崩溃或做一些完全不同的事情。它很可能会通过覆盖其他东西(例如堆栈指针)来破坏您的堆栈,这可能会或可能不会使程序崩溃。如果我在 Visual Studio 中以123456789为输入运行您的程序,它会崩溃。 -
我怎么能确定从控制台按下
enter后,我的值将严格为 6 个字符长? -
读入变量
until将达到counter设置为6? -
@MarcStröbel 但它仍然让我输入多个字符
-
"我怎么能确定从控制台按回车后,我的值将严格为 6 个字符长?"你不能,这就是为什么
char qs2[7]; cin >> qs2是个坏主意
标签: c++ string char undefined-behavior c-strings