gpt4 book ai didi

c++使用字符串的动态数组不接受字符串

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

我正在尝试将临时数组中的字符串放入动态数组中。但是编译器遇到这个问题时就会中断。

调用 dynaicArray 的地方:

string* dynamicArray = NULL;

这里是崩溃的地方:

for (int i = 1; i <= (size); i++)
{
dynamicArray[i] = tempArray[i];
}

填充tempArray的地方:

void populateArray(int& size, string*& dynamicArray)
{
char decide;
string tempArray[100]; //Holds the strings until the size is known
bool moreStrings = true;
while (moreStrings == true)
{
cout << "\nEnter your string here:";
cin >> tempArray[size];
cout << "\nDo you want to enter another string? Y/N:";
cin >> decide;
decide = toupper(decide);
size ++;
dynamicArray = new string[size];
if (decide == 'N')
{
for (int i = 1; i <= (size); i++) //moves all of the strings from tempArray to dynamicArray
{
string temp;
temp = tempArray[i];
dynamicArray[i] = temp;
}
moreStrings = false;
}
}
}

PS:我知道 vector 更好。不幸的是,他们不是一个选择。

最佳答案

一些设计思路:

  • if (decide == 'N') 中的代码块最好放在 while 之后,以使 while 更小 == 更具可读性
  • 完成上述操作后,您可以设置 moreStrings var 直接用你的 decide == 'N' 的结果;不需要明确的 if还有了
  • 你现在做一个dynamicArray = new string[size];每次通过 while 时,这是一个巨大的内存泄漏(您正在用新拷贝覆盖新创建的动态数组,而不是先回收旧数组 - 请参阅 dalete[])
  • 如前所述:不要假设 100 就足够了 - 阅读“缓冲区溢出”(唯一可行的解​​决方案:也将其设为动态数组,如果它已满则重新分配给更大的数组)
  • 更好地初始化size在你使用它之前的功能中 - 更安全;来电者不需要记得自己做
  • C++ 数组是从 0 开始的,因此当您开始复制它们时,最好也从 0 而不是 1 开始
  • 吹毛求疵:for (int i = 1; i <= (size); i++) : size 周围的 () 是多余的
  • 奖励高级吹毛求疵:使用++size++i在这些情况下;效率更高一些
  • 你现在使用变量 tmp从临时数组复制到动态数组,代码也有些结构化,建议您使用它来交换两个数组之间的字符串(您不是)-重命名 tmp 变量或完全删除它

关于c++使用字符串的动态数组不接受字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21749035/

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