C++字符数组打印时出现额外随机字符的原因是什么?
问题原因及解决办法
你遇到的问题核心在于C风格字符串必须以空字符'\0'作为结束标志。当你用std::cout << array;打印字符数组时,程序会从数组起始位置逐个输出字符,直到碰到'\0'才会停止。但你的代码里只往数组中存入了n个输入字符,没有在最后添加这个结束标志,导致程序继续读取数组后面未初始化的内存区域,这些区域里的随机值就被当成额外字符打印出来了。
解决方法
有两种简单的修复方式:
方式一:手动添加结束标志
在循环结束后,给数组的第n位赋值'\0'(注意要保证n < 100,避免数组越界):
#include<iostream> int main() { int n; std::cin>>n; char array[100]; for(int i=0; i<n; i++) { std::cin>>array[i]; } array[n] = '\0'; // 添加结束标志 std::cout<<array; return 0; }
方式二:改用std::string存储(更推荐)
C++的std::string会自动处理字符串结束的逻辑,不需要手动管理'\0',使用起来更安全便捷:
#include<iostream> #include<string> int main() { int n; std::cin>>n; std::string str; for(int i=0; i<n; i++) { char c; std::cin>>c; str += c; } std::cout<<str; return 0; }
内容的提问来源于stack exchange,提问作者Yogesh Kumar
相关产品推荐
相关产品推荐

