char阵列存储太多字符?(C )
char array storing too many characters? (c++)
做消息程序,然后遇到一个我对缓冲区不了解的问题。我敢肯定的答案真的很简单,但我只是无法缠绕着它。我试图要求用户输入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位数字的名称,尽管Myid只有10个字符,但它将在Sprintf_s函数中打印出整个名称。我根本不了解这种行为...
例如,如果我将" Hellokitty69420"输入Myid,然后将" Yoyoyo"键入tempchararray,我希望它会打印" Hellokitty:yoyoyo",因为Myid只能持有10个字符,但它只能打印出" Hellokitty69420:Iyoyoyo:yoyoyo":Iyoyoyo:yoyoyo'''"。
发生了什么事?
我会评论您实现目标的整体策略(即。这绝对不是我会采用的方式),但是我会专注于答案。
首先,您应该使用std::cin.width(10)
来限制实际存储并移至Myid的字符数。
其次,在上述情况下,您似乎很幸运。溢出字节写入第二个数组sendBuff
,Sprintf正在编写Myid和Sendbuff的字符。
溢出字节被写入第二个数组中的原因是,编译器只是将Myid和Sendbuff放置在连续的存储区域中。IE Myid [1000]将与Sendbuff [1000-11]
相关文章:
- 如何打印一个字符阵列和其中的特定字符
- 比strncpy更好地复制字符阵列的部分方法
- 在字符阵列C 中存储整数值
- C 程序仅在字符阵列获得“ 1000!”的输入时才在DELETE上崩溃
- 界面设计:超载功能的安全性采用字符串和字符阵列
- 可以使用工会将字符阵列转换为浮动
- 我如何将整数转换为存储在字符阵列中的十六进制字节
- 访问字符阵列中不可用的内存位置(超出范围值)
- 需要将单词的文本文件存储到C 中的字符阵列中
- 恒定字符阵列的获取字符串长度函数(strlen)不是恒定表达式
- MBED RTOS将Float转换为字符串/字符阵列
- 如何将整数存储在字符阵列中
- 全球字符阵列(2D)
- 如何将一个数字(大于8个字节)从字符阵列转换为其ASCII表示
- 替换字符阵列C 中的字符
- 字符阵列未正确初始化
- 向字符阵列宣布指针
- 将字符阵列施放到另一种类型中是否违反了严格的确定规则
- 每次循环时,输出一个具有较小字符的字符阵列
- QT更改字符阵列中的项目