我使用下面的代碼來創建的「關鍵」可以用來測試哈希表(特別是我測試刪除項目所需的時間)不同在我標註評論的行中,有一種奇怪的行爲。我正在使用sprintf將「temp_key」的內容複製到「key」。在此之前,我用strncpy()函數來「temp_key」到「關鍵」,但我從這個操作得到的結果是這樣的(從Xcode的調試印刷)的內容複製:strncpy()函數行爲與sprintf的的
Printing description of key:
(char *) key = 0x0000000100103ed0 "Key: 10\xb0\xe7\x03\x01\x10"
而「temp_key」產生下面的輸出:
Printing description of temp_key:
(char [20]) temp_key = "Key: 10" {
[0] = 'K'
[1] = 'e'
[2] = 'y'
[3] = ':'
[4] = ' '
[5] = '1'
[6] = '0'
[7] = '\0'
[8] = '\0'
[9] = '\0'
[10] = '\0'
[11] = '\0'
[12] = '\0'
[13] = '\0'
[14] = '\0'
[15] = '\0'
[16] = '\0'
[17] = '\0'
[18] = '\0'
[19] = '\0'
}
散列表使用memcmp比較htable_item_search函數中的鍵。但使用strncpy有一些項目(如「Key:10」),這些項目在使用sprintf時沒有找到,所以它可以很好地工作。那麼爲什麼這種差異?
爲什麼不使用'strdup'。它完全符合你的'strlen + malloc + strcpy',只是在一個簡單的調用中。它在任何情況下都可以廣泛使用。 –
而你'sprintf'爲false:它應該讀'sprintf(temp_key,「Key:%d」,i);'。因爲使用了數組的&,所以你必須強制禁止警告。 –
而在C中,你的函數簽名應該是'void remove_keys(void)'。 '()'意味着C中完全不同的東西。在C++中它可以,但不在C中。 –