【发布时间】:2014-03-07 20:43:11
【问题描述】:
做一个消息程序的事情,遇到了一个我不理解缓冲区的问题。我敢肯定的答案很简单,但我就是无法理解它。我正在尝试让用户输入一个 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” .
发生了什么事?
【问题讨论】:
标签: c++ buffer cin getline printf