我正在以这种方式定义一个 char 指针。
char *s=(char *)malloc(10);
在我填写所有可能适合此处的值后,我想清除我写给 s 的任何内容,并且不再使用 malloc 想写在 s 中吗?我怎样才能做到这一点?
我需要更新内容,但如果在最后一次迭代中没有更新所有值,那么我将处理我不想做的旧值。
我正在以这种方式定义一个 char 指针。
char *s=(char *)malloc(10);
在我填写所有可能适合此处的值后,我想清除我写给 s 的任何内容,并且不再使用 malloc 想写在 s 中吗?我怎样才能做到这一点?
我需要更新内容,但如果在最后一次迭代中没有更新所有值,那么我将处理我不想做的旧值。
当心!
malloc(sizeof(2*5))
与 32 位系统相同,malloc(sizeof(int))
仅分配 4 个字节。如果要分配 10 个字节,请使用malloc(2 * 5)
.
malloc()
您可以使用memset(s, 0, 10)
或清除分配的内存memset(s, 0, sizeof(int))
,以防万一这确实是您想要的。
请参阅man memset。
另一种清除内存的方法是使用calloc
而不是 malloc。这与 malloc 一样分配内存,但也将内存设置为零。
您可以使用memset
,并将内存块中的所有字节设置为 ,来“清除”内存0
。例如:
#define MEMORY_BLOCK 10
//allocate memory
unsigned char* s = malloc(MEMORY_BLOCK);
//... do stuff
//clear memory
memset(s, 0, MEMORY_BLOCK);
几点观察:
malloc()
C中的返回值。malloc()
论点看起来不对;请注意,这sizeof
是一个运算符,而不是一个函数。它将计算其参数类型的大小: 2 * 5 具有 type int
,因此该值可能是 4。请注意,这对于所有整数表达式都是相同的:sizeof 1
与 相同sizeof 100000000
。你的问题很不清楚,很难理解为什么你觉得你必须“清除”字符串区域。内存就是内存,它将保存您上次写入的内容,无需在两次写入之间“清除”它。实际上,“清除”只是写入某些特定值。