gpt4 book ai didi

c++ - 调整动态字符串数组的大小

转载 作者:行者123 更新时间:2023-11-30 01:22:50 27 4
gpt4 key购买 nike

我正在尝试调整动态分配的字符串数组的大小;这是代码!

void resize_array() {
size_t newSize = hash_array_length + 100;
string* newArr = new string[newSize];

fill_n(hash_array,newSize,"0"); //fills arrays with zeros

memcpy( newArr, hash_array, hash_array_length * sizeof(string) );

hash_array_length = newSize;
delete [] hash_array;
hash_array = newArr;
}

不幸的是它不工作并给出了一个段错误。知道为什么吗?这基本上是一个线性探测哈希表,其中元素被插入到任何有 0 的地方,因此我使用 fill_n 用 0 填充新创建的数组。有什么帮助吗?

最佳答案

memcpy( newArr, hash_array, hash_array_length * sizeof(string) );

这一行非常危险,std::string 不是普通的旧数据类型,您无法确保 memcpy 可以正确初始化它,这可能会导致未定义的行为,C++(或编程)最讨厌的行为之一。

此外,还有更好、更安全(在大多数情况下)的解决方案可以创建c++中的动态字符串数组,只需使用vector

//create a dynamic string array with newSize and initialize them with "0"
//in your case, I don't think you need to initialize it with "0"
std::vector<std::string> newArr(newSize, "0");

如果 hash_array 具有与 newArr(std::vector) 相同的类型复制的方式非常简单。

c++98

std::copy(hash_array.begin(), hash_array.end(), newArr.begin());

C++11

std::copy(std::begin(hash_array), std::end(hash_array), std::begin(newArr));

最好把c++当作一门新的语言,它和c有太多的不同。此外,还有很多不错的免费 IDE,比如 code::blocks 和 QtCreatordevc++ 是一个几乎死掉的项目。

如果您是 c++ 的新手,c++ primer 5 是一本很好的入门书。

关于c++ - 调整动态字符串数组的大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15734465/

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