我是一个新的 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 终止符