好吧,我正在研究别人的代码.他们做了很多这样的事情:
char description[256]; description[0]=0;
我知道这会在字符数组的第一个位置放置\ 0.但这甚至是一种擦除字符串的安全方法吗?
视觉工作室也会报告内存泄漏,我几乎把这个完成与使用的字符串联系起来.
PS.是的我知道std :: string,是的,我使用它.这不是我的代码.
要将字符串初始化为0,您可以执行以下操作:
char description[256] = {0};
这将为数组的每个元素分配0.
只是将第一个元素设置为0
('\0'
)不会删除它的内容.它甚至不保证整个字符串被设置为空字符.
正如其他人所说,在函数关闭之前,当它被放弃时,你不能"擦除"静态创建的对象.从技术上讲,当函数被放弃时它也不会被删除 - 堆栈指针只是被改变了.如果你对被删除的数据感到偏执,你应该遍历数组,将每个条目设置为0
('\0'
).
将char数组的第一个元素设置为\ 0就足以确保'description'是一个格式正确的实际字符串.元素1到255都可以是垃圾,只要元素0为0,描述就是零长度字符串.
你不必担心上面发布的代码中的内存泄漏,因为数组是在堆栈上分配的.一旦它从堆栈中掉落(超出范围),char数组就会被释放.