所以我制作了一个结构,我在函数内部调用了它,但事情进展不顺利......
结构如下......
结构功能
struct Line {
private:
int lineNumber;
char lineString[];
public:
bool set(int n,const char* str);
void display() const;
};
一切都在函数内正常工作,我存储了lineN和lineS然后将它们发送到名为...的函数中。 bool set(int n,const char * str); (从上面)使用名为存储的结构。在第一个while循环之后,我使用了一个名为display的函数来显示lol。
设定功能
void List::set(int no){
Line storage[no];
int i =0, x;
while (i!=no){
cout << "Enter line number : ";
cin >> lineN;
cout << "Enter line string : ";
cin >> lineS;
x = storage[i].set(lineN, lineS);
if (x == 1){
i++;
}
}
i=0;
while (i!=no){
storage[i].display();
i++;
}
}
除了检查“true / false”之外,True是任何正整数,False是0或负整数。我使用以下bool在存储结构中存储数字(如果它们是真的)...我认为问题出在这里但我似乎无法绕过它......
BOOL FUNCTION
bool Line::set(int n, const char* str){
int i;
if (n >= 1){
lineNumber = n;
for (i=0;i<6;i++){
lineString[i]=str[i];
}
lineString[6]='\0';
return true;
}
else if (n <= 0)
return false;
}
显示功能
void Line::display()const{
cout << "LINE: " << lineNumber << " STRING: " << lineString << endl;
}
然而,当我点击运行该程序并让我说我输入3次...行号和行字符串...我的结果如下...
INPUT:
Enter line number : 3
Enter line string : ABCDEF
Enter line number : 6
Enter line string : YYUTXL
Enter line number : 8
Enter line string : XYXYXX
输出:
LINE: 3 STRING:
LINE: 6 STRING:
LINE: 8 STRING: XYXYXX
所以我的问题是为什么不在最后一个字符串之前存储在字符串中,如果我这样做2次,只有第二个/最后一个将在其中包含字符串。我正确存储它我不是吗?
我渴望输出:
LINE: 3 STRING: ABCDEF
LINE: 6 STRING: YYUTXL
LINE: 8 STRING: XYXYXX
答案 0 :(得分:5)
麻烦的是,这是在创建一个空数组:
char lineString[];
你并没有告诉它有多大,所以它的长度是零字节。因此,您尝试保存六个字符的字符串就会覆盖内存。
你真的应该使用std::string
,但如果你不想,你至少需要说出你的字符串有多大:
char lineString[50]; // save up to 49 characters + NULL.