我有一个类属性,它是一个字符串数组(std::string command[10]
)。当我为它分配一些字符串值时,它会停止程序执行。如下所示,我将一个字符串变量tempCommandStr
分配给我的属性。我不知道错误是什么,但我在分配后的print语句从未执行过,而前面的那个是。
//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会使其无法使用?
答案 0 :(得分:0)
你来自错误的默认位置。 “清零”内存是一种有意义的(甚至是有用的)操作的类型是特殊的;你不应该期望做这样的事情有什么好处,除非这个类型专门设计用于那个。