C++字符数组输出出现随机字符的原因咨询
char数组输出出现随机字符的成因及解决办法
问题成因
- C++里用
cout输出char数组时,会把它当成C风格字符串处理,而C风格字符串必须以'\0'(空字符,ASCII值为0)作为结束标记。 - 你的每个char数组都刚好被字符填满(比如
big_characters[26]存了26个字符,数组大小就是26),根本没留位置放'\0'。cout输出时会从数组开头一直读内存,直到碰到'\0'才停,这期间就会把数组后面的随机内存内容也读出来,也就是你看到的那些莫名的随机字符。
解决办法
办法1:给char数组加结束符
修改数组定义,把数组容量设为实际字符数+1,要么手动在末尾加'\0',要么利用初始化规则让剩余位置自动补'\0':
// 手动添加结束符 char big_characters[27] = {'Q', 'W', 'E', 'R', 'T', 'Y', 'U', 'I', 'O', 'P', 'A', 'S', 'D', 'F', 'G', 'H', 'J', 'K', 'L', 'Z', 'X', 'C', 'V', 'B', 'N', 'M', '\0'}; // 或者只初始化前26个元素,剩余位置会自动被初始化为'\0' char big_characters[27] = {'Q', 'W', 'E', 'R', 'T', 'Y', 'U', 'I', 'O', 'P', 'A', 'S', 'D', 'F', 'G', 'H', 'J', 'K', 'L', 'Z', 'X', 'C', 'V', 'B', 'N', 'M'};
办法2:改用std::string(你猜测的方案是对的)
用std::string存储字符序列,它会自动处理内存和结束标志,不用手动管理'\0',代码更简洁安全:
#include <iostream> #include <string> using namespace std; int main() { string big_characters = "QWERTYUIOPASDFGHJKLZXCVBNM"; cout << big_characters << endl << endl; string small_characters = "qwertyuiopasdfghjklzxcvbnm"; cout << small_characters << endl << endl; string digits = "1234567890"; cout << digits << endl << endl; // 注意特殊字符的转义:"要写成\",\要写成\\ string special_characters = "`~!@#$%^&*()-_=+[]{};|,<.>/?\"'\\\\"; cout << special_characters << endl << endl; return 0; }
内容的提问来源于stack exchange,提问作者jjj
相关产品推荐
相关产品推荐

