为什么我的struct只存储最后一个字符串,而不是每一个

Why does my struct only store string on the last one and not every?

本文关键字:每一个 字符串 最后一个 我的 struct 存储 为什么      更新时间:2023-10-16

所以我创建了一个结构体,并在函数中调用它,但事情并不顺利…

结构体如下…

<<p> 结构函数/strong>
struct Line {
  private:
    int lineNumber;
    char lineString[];
  public:
    bool set(int n,const char* str);
    void display() const;
};

函数内的一切都很好,我存储了lineN和lineS,然后将它们发送到名为…bool set(int, const char* str);(如上所述)使用名为storage的结构体。在第一个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是0或负整数。我使用以下bool在存储结构中存储数字(如果它们是true)…我认为问题就在这里,但我似乎无法理解……

<<p> BOOL函数/strong>
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]='';
        return true;
    }
else if (n <= 0)
    return false;
}
<<p> 显示功能/strong>
void Line::display()const{
cout << "LINE: " << lineNumber << " STRING: " << lineString << endl;
}

然而,当我点击运行程序,假设我输入3次…行号和行字符串…我的结果如下…

输入:

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

问题在于这是在创建一个空数组:

char lineString[];

你没有告诉它要多大,所以它把它设为0字节长。因此,尝试保存6个字符串是在覆盖内存。

你真的应该使用std::string,但如果你不想,你至少需要说明你的字符串有多大:

char lineString[50]; // save up to 49 characters + NULL.
相关文章: