gpt4 book ai didi

c++ - 为什么我的结构只在最后一个而不是每个上存储字符串?

转载 作者:太空宇宙 更新时间:2023-11-04 16:20:51 25 4
gpt4 key购买 nike

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

结构如下...

结构函数

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); (从上面)使用名为 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”之外,True 是任何正整数,False 是 0 或负整数。我正在使用以下 bool 在存储结构中存储数字(如果它们是真的)...我认为问题出在这里但我似乎无法理解它...

bool 函数

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 次...行号和行字符串...我的结果如下...

输入:

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[];

你没有告诉它要让它有多大,所以它让它的长度为零字节。因此,您尝试保存六个字符的字符串会覆盖内存。

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

char lineString[50]; // save up to 49 characters + NULL.

关于c++ - 为什么我的结构只在最后一个而不是每个上存储字符串?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16952221/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com