gpt4 book ai didi

c++ - 使用 memset 将其设置为 0 后字符串数组不可用

转载 作者:行者123 更新时间:2023-11-28 02:16:34 25 4
gpt4 key购买 nike

我有一个类属性,它是一个字符串数组 (std::string command[10])。当我为它分配一些字符串值时,它会停止程序执行。正如您在下面看到的,我有一个字符串变量 tempCommandStr,我将其分配给我的属性。我不知道可能是什么错误,但我有赋值后的打印语句,它从未执行过,而它之前的打印语句是。

//Declared in class header
std::string command[10];

// Part of function which is causing problem.
string tempCommandStr(commandCharArray);
printf("%s\n", tempCommandStr.c_str()); // Prints fine.
this->command[i] = tempCommandStr; // Something goes wrong here. i is set to some correct value, i.e. not out of range.
printf("%s\n", this->command[i].c_str()); // Never prints. Also program stops responding.

// I noticed that getting any value from the array also stops the execution.
// Just the following statement would stop the program too.
printf("%s\n", this->command[i].c_str());

不仅仅是这个属性,我还有另一个数组也有同样的问题。是什么原因造成的?到底出了什么问题(看看编辑)?还有其他更好的方法吗?

我在 MBED 上运行该程序,因此我的调试选项有限。

编辑:我发现了问题,在使用 memset(command, 0, sizeof(command)); 删除任何以前的值之前,我正在清理数组。这是导致问题的原因。现在我对数组中的每个项目使用 clear 函数,如下所示。这解决了执行问题。

for (int i = 0; i < sizeof(command)/sizeof(*command); i++){
command[i].clear();
}

问题:为什么使用memset将字符串数组设置为0会使其无法使用?

最佳答案

Why does setting the string array to 0 using memset makes it unusable?

因为您要删除字符串类中保存的值,用 0 覆盖它们。 std::string 具有指向存储字符串、字符计数信息等的内存的指针。如果将 memset() 所有这些设置为 0,它将无法工作。

关于c++ - 使用 memset 将其设置为 0 后字符串数组不可用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33860073/

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