c++ - char 数组存储太多字符? (c++)

标签 c++ buffer cin getline printf

做一个消息程序的事情,遇到了一个我不明白缓冲区的问题。我确定答案非常简单,但我就是无法理解它。我正在尝试让用户输入一个 10 位数字的名称作为用户名。

char myID[11]; // stores 10 characters plus newline at the end   
char sendBuff[1024] 

cout << "Enter your nickname(10 digits): ";  
cin >> myID;
cin.ignore(1000, '\n'); //clears buffer, or so I thought

然后我得到消息的一些实际文本,将其存储在 tempCharArray 中,然后使用 sprintf_s 组合用户名和消息文本。

char tempCharArray[1024];
cin.getline( tempCharArray, 1024 );                 

sprintf_s(sendBuff, 1024, "%s: %s", myID, tempCharArray );  //combines username and message text into one line before being printed

现在,我的问题是,如果我输入一个超过 10 位数字的名称,它会在 sprintf_s 函数中打印出整个名称,尽管 myID 只有 10 个字符。我完全不理解这种行为......

例如,如果我在 myID 中输入“HelloKitty69420”,然后在 tempCharArray 中输入“yoyoyo”,我希望它打印“HelloKitty: yoyoyo”,因为 myID 只能容纳 10 个字符,但它会打印“HelloKitty69420: yoyoyo” .

这是怎么回事?

最佳答案

我会评论您实现目标的总体策略(即,这绝对不是我会采用的方式),但我会专注于一个答案。

首先,您应该使用 std::cin.width(10) 来限制实际存储和移动到 myID 的字符数。

其次,您在上述情况下似乎很幸运。溢出字节被写入第二个数组 sendBuff 并且 sprintf 正在写入来自 myID 和 sendBuff 的字符。

溢出字节被写入第二个数组的原因是编译器只是将 myID 和 sendBuff 放在连续的内存区域中。即 myID[1000] 与 sendBuff[1000-11] 相同

关于c++ - char 数组存储太多字符? (c++),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22260280/

相关文章:

c++ - 从基类使用和重新定义 typedef

javascript - Node.JS 大端 UCS-2

javascript - scriptNode.onaudioprocess 已弃用,还有其他选择吗?

未读取 C++ 输入

c++ - 如何在C++中输入整数而不使用 ">>"

c++ - 在 OpenCV 中从点云到图像的项目点

c++ - Cocos2d-x 如何列出资源目录下的所有文件

c++ - QT C++ - QNetworkAccessManager 需要帮助!类(Class)问题

JavaScript Node.Js 缓冲区到二进制

c++ - C++ 中 15000 数组索引后的不相关整数标准输入