我正在用這種方式定義一個char指針。如何清除C中的內存內容?
char *s=(char *)malloc(10);
我填的,可以適應這裏的所有可能值之後,我想清楚無論我寫信給S和不使用malloc又要以s寫?我怎樣才能做到這一點?
我需要更新內容,但如果在最後一次迭代中沒有更新所有的值,那麼我將處理舊值,我不想這樣做。
我正在用這種方式定義一個char指針。如何清除C中的內存內容?
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()
的返回值C.malloc()
參數看起來不對;注意sizeof
是一個操作符,而不是一個函數。它將評估其參數類型的大小:2 * 5的類型爲int
,因此該值可能爲4.請注意,對於所有整數表達式,這是相同的:sizeof 1
與sizeof 100000000
相同。你的問題很不清楚,不明白爲什麼你覺得你必須「清除」字符串區域。內存是內存,它會保存你上次寫入的內容,不需要在寫入之間「清除」它。事實上,「清晰」只是一些具體的價值。
請解釋一下你的意思是「清楚」。 –
如果你想更新's'的內容,爲什麼還要清理這個值呢? – Vlad
'sizeof(2 * 5)'看起來很有趣...試一下'sizeof(2/0)' –