我以这种方式定义字符指针。
char *s=(char *)malloc(10);
在我填写了所有可能适合这里的值后,我想清除我写到 s 的任何内容,并且不再使用 malloc 想写 s 吗?我该怎么做?
我需要更新内容,但如果在上次迭代中并非所有值都更新,那么我将处理我不想做的旧值。
小心!
malloc(sizeof(2*5))
与 malloc(sizeof(int))
相同,在 32 位系统上仅分配 4 个字节。如果要分配 10 个字节,请使用 malloc(2 * 5)
。
您可以使用memset(s, 0, 10)
或memset(s, 0, sizeof(int))
清除malloc()
分配的内存,以防万一这真的是您想要的。
见男人记忆。
清除内存的另一种方法是使用 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);
几点观察:
- 不需要在 C 中强制转换
malloc()
的返回值。 - 你的
malloc()
参数看起来是错误的;请注意,sizeof
是一个运算符,而不是一个函数。它将计算其参数类型的大小:2 * 5 的类型为int
,因此值可能是 4。请注意,这对于所有整数表达式都是相同的:sizeof 1
与sizeof 100000000
相同。
你的问题非常不清楚,不容易理解为什么你觉得你必须"清除"字符串区域。内存就是内存,它将保存您上次写入的内容,无需在写入之间"清除"它。事实上,"清除"只是某种特定价值的写入。