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