2014-11-03 27 views
-1

對於這個程序,我收到了一些奇怪的輸出?關於c中的memset()函數?

char str[]= "almost every programmer should know memset!"; 
    memset(str,'*',5); 
    puts(str); 

所需的輸出: *****幾乎每個程序員都應該知道memset的! 我觀察到: ***** t alomost每個程序員都應該知道memset!

對於6的倍數,只顯示正確的輸出。

+2

您觀察到的輸出是否準確? – zubergu 2014-11-03 10:35:00

+4

你絕對沒有注意到輸出是每個程序員都應該知道memset!*你可能有* * * * * * * * * * *每個程序員都應該知道memset的!* – 2014-11-03 10:35:38

回答

4

在大多數情況下,數組名稱衰變成一個指針的第一個元素,這意味着您memset()調用設置5個字節到'*',從str第一個元素開始。換句話說,它會覆蓋前5個字母與'*',輸出將是:

*****t every programmer should know memset! 
6

您所看到的輸出是正確的:

memset()將設置'*'的前5個字節的數組str。其餘的字符串保持原樣。