#include <iostream>
using namespace std;
typedef struct
{
char streetName[5];
} RECORD;
int main()
{
RECORD r;
cin >> r.streetName;
cout << r.streetName << endl;
}
Run Code Online (Sandbox Code Playgroud)
当我运行这个程序时,如果我输入超过5个字符,输出将显示我输入的整个字符串.它不会截断5个字符.这是为什么?
我怎样才能让它正常工作?
为了将输入限制为接收阵列的大小,您需要使用输入法提供的长度限制功能.在您正在使用的情况下cin,这意味着您可以使用其width方法指定限制
cin.width(5);
cin >> r.streetName;
Run Code Online (Sandbox Code Playgroud)
因为cin将streetName视为char*并写入内存,所以没有什么可以停止写入*(streetName + 6)以及更进一步.这是缓冲区溢出的一种形式
在这种情况下,最好的代码是将streetName定义为std :: string
即
typedef struct
{
std::string streetName;
} RECORD;
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
705 次 |
| 最近记录: |