使用memset

时间:2015-11-22 20:54:27

标签: c++ arrays mbed

我有一个类属性,它是一个字符串数组(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会使其无法使用?

1 个答案:

答案 0 :(得分:0)

你来自错误的默认位置。 “清零”内存是一种有意义的(甚至是有用的)操作的类型是特殊的;你不应该期望做这样的事情有什么好处,除非这个类型专门设计用于那个。