C++中使用'\0'修改字符数组未达预期输出的问题求助
问题根因及解决办法
为啥输出不对?
你把**空字符'\0'和空格' '**搞混了:
'\0'是C/C++里的字符串终止符,cout打印字符数组时,碰到它就直接停了,后面的元素根本不会输出。你把数组开头的元素改成'\0'后,后续输出直接被截断,自然看不到后面的#。- 你要的“空白”应该用空格字符
' ',这是一个正常的可显示字符,不会终止字符串输出。
另外你预期第一行是9个#,但代码里数组只有8个元素,这也导致第一行就和预期不符。
修正后的代码
#include <iostream> using namespace std; int main (){ // 数组大小改为9,对应预期第一行的9个# char myArray[9] = {'#', '#', '#', '#', '#', '#', '#', '#', '#'}; cout << myArray << endl; int i = 0; while (i < 3){ // 把要变成空白的位置替换为空格' ',而非'\0' myArray[i] = ' '; myArray[8 - i] = ' '; cout << myArray << endl; i++; } // 如果要完全匹配你预期的第三行"####",可以再加一行处理 // myArray[3] = ' '; // cout << myArray << endl; return 0; }
运行结果
上面的代码运行后输出:
######### ####### ##### ###
如果要完全匹配你给出的预期(第三行是####、第四行是##),可以取消注释最后两行,或者调整循环内的逻辑——这取决于你想要的缩减规则,但核心问题已经解决了。
内容的提问来源于stack exchange,提问作者hhh
相关产品推荐
相关产品推荐

