我正在以这种方式定义一个字符指针。
char *s=(char *)malloc(10);
当我填写所有可能适合的值后,我想要清除我写入到s中的任何内容,并且不使用malloc再次想s中写入?我该怎么做?
我需要更新内容,但如果在最后一次迭代中没有更新所有值,则我将处理旧值,这是我不想做的。
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()
分配的内存,以防这确实是您想要的结果。
请参见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()
的返回值强制转换。malloc()
参数看起来有误;请注意,sizeof
是一个操作符,而不是函数。它将计算其参数类型的大小:2 * 5 的类型为 int
,因此该值可能为 4。请注意,对于所有整数表达式都是如此: sizeof 1
和 sizeof 100000000
相同。您的问题非常不清楚,很难理解为什么您觉得必须“清除”字符串区域。内存就是内存,它将保留您上次写入的内容,在写入之间没有必要“清除”它。实际上,“清除”只是写入某些特定值。
sizeof(2*5)
看起来有点奇怪... 也试试sizeof(2/0)
- Alex Fsizeof(-1000)
会给你一个负数大小的数组:如果你的内存用完了,这非常有用! - Vlad