2009-05-28 85 views
0

我只是将一个Objective-C库转换为C库,希望能够跨平台。然而,一切似乎都没有问题,直到我把这件东西送去处理。Malloc'ed字符串包含垃圾值

这是在我得到一个错误。

回想几个修订,我注意到调试器中的一些东西。

右像这样一个malloc分配字符串后:

char *theString = malloc(SOME_SIZE * sizeof(char)); 

我会看到theString是\ X03和* theString是 “3 '\ 003'”。

我最初假定这只是奇怪的记忆,因为我没有穿过strcat或任何东西,但是奇怪的起始字符贯穿始终,并且在每一个其他点都重复执行类似的malloc 。

就正常处理而言,这很好。不幸的是,我不明白它是什么,否则,我只会做一些像切断第一个角色或其他东西那样激烈的事情。

有人可以向我解释那是什么以及如何处理它,如果我想要安全地将其转换为NSString?

回答

9

malloc返回的值不保证设置为任何特定值。只有在您指定的时间内,才能保证您拥有的内存长度至少可以保证。如果你想让记忆保持一定的价值,你需要自己去做。或者使用calloc来清零内存。

+1

请注意,除非必要,否则不应使用calloc(例如对于结构体或数组)。 – 2009-05-28 05:33:32