有人可以在下面的示例 C++ 程序中解释字符数组 KCHAR1 的奇怪行为吗?



我是一个新的 c++ 程序员,遇到了一些我无法解释的字符数组行为。 这对我来说严格来说是一个学习练习。

我理解为什么 kchar 和 kchar1 显示的 j 等于 0 到 5 的值,但不明白为什么 k1 在 j = 6 和 7 时显示额外的字符。 我也无法解释为什么当 j = 7 时 kchar 显示 kchar[0] 的值为 7。

提前谢谢。

Ken_SF

在 j = 6 和 7 下观察到的输出:

j = 6 k : '10111010' K1:"012345610111010">

j = 7 k : '70111011' K1:"012345670111011">

结束输出,代码如下所示:

#include <iostream>
#include <windows.h>
using namespace std;
int main(){
char buf[] = "101110111101110111011110110111011101101110111011101110111110111011101110111011011";
char kchar[] = "00000000";//interesting kchar[7]; gives weird results when you display kchar for many iterations
char kchar1[7];
for (int j = 0 ; j < 8 ; j++){
kchar[j] = buf[j];
kchar1[j] = j + '0';
cout << "j = " << j << endl;
cout << "k : '" << kchar << "'" << endl;
cout << "k1: '" << kchar1 <<  "'" << endl;
cout << endl;
}
system("pause");
return 0;
}

简单地说,你的程序运行一个未定义的行为:因为kchar1有 7 个元素,但你的循环迭代到j = 7所以kchar1[7]是未定义的行为,这就是你得到无效字符的原因。所以kchar1中的最后一个字符是kchar1[6]不是kchar1[]7

  • 还有另一个未定义的行为:kchar1必须有一个 Null 终止符作为最后一个元素:

    // inside loop:
    if(j < 7 - 1)
    kchar1[j] = j + '0';
    kchar1[6] = '';
    

最新更新