这是我的计划:
#include<iostream>
#include<string>
using namespace std;
class classTwo
{
public:
//constructors
classTwo();
classTwo(const char chars[101]);
private:
char classTwoArray[101];
};
//default classTwo constructor
classTwo::classTwo()
{
strcpy(classTwoArray, "no data");
}
//other classTwo constructor
classTwo::classTwo(const char thisArray[101])
{
strcpy(this->classTwoArray, thisArray);
}
class classOne
{
public:
//default constructor
classOne();
// function
void functionOne(const classTwo& classTwoObject);
private:
classTwo hundredObjects[99];
int size;
};
//classOne default constructor
classOne::classOne()
{
size = 0;
}
int main(){
classTwo object;
char charArray[101];
string lemmeSee;
cout << charArray << endl;
cin >> lemmeSee;
return 0;
}
以下是我运行此程序时会发生的事情:
所以我有两个问题:
1)为什么charArray会填充“无数据”,这应该是针对classTwoArray的?我注意到这只发生在main中包含classTwo对象时。
2)“无数据”之前的那些符号是什么?当我注释掉// classTwoObject这一行时,我得到了那些相同的符号,除了在那种情况下而不是“无数据”之后,它们后面跟着一些其他符号($和其他一些符号,我明白是couting的结果一个空数组,但我不明白为什么看起来像括号和行的那些在任何一种情况下都显示出来。)
答案 0 :(得分:3)
main()中的chararray
未初始化。使用未初始化的变量会导致未定义的行为。
你可以猜测会发生什么以及为什么你会得到这个消息。但它未定义。
答案 1 :(得分:3)
char charArray[101];
未初始化 - 这意味着可以填充任何内容。 charArray
和object
都位于堆栈上,编译器将object
放在堆栈中charArray
之后。当您将charArray
输出到cin
时,它会在遇到0
之前尝试输出每个符号。因为charArray
中没有零(它刚刚发生),它继续输出符号并偶然发现object
所在的内存。有0
和object
的结尾,因此它停止输出任何内容。您可以通过编写char charArray[101] = {};
来解决问题,它会将其初始化为零。