您不能忽略錯誤。你只能忽略警告。更改代碼。
printf("\\x%02x", ((unsigned char *)code)[i]);
這只是一種猜測,因爲沒有從代碼的原作者文檔或輸入,我們有什麼樣的代碼實際上是應該做的事沒有確鑿的證據。然而,上述更正是非常合理,這是一個簡單的錯字(原作者忘記了\
),並且可以想象,作者使用C編譯器,該編譯器默默地忽略錯誤(Python在設計上具有相同的行爲)。
上面的代碼行或幾乎完全一樣的代碼可以在全球大概數以萬計的源文件中找到。它用於使用轉義序列對二進制blob進行編碼,因此它可以作爲文字嵌入到C程序中。類似的代碼出現在JSON,XML和HTML發射器中。我可能已經寫了一百遍了。
另外,如果代碼被認爲打印出的字符,這是行不通的:
printf("\x%02x", ((unsigned char *)code)[i]);
這不起作用,因爲轉義序列(即與\
開始的事情,比如\x42
)由C編譯器處理,但格式字符串(以%
開頭的內容,如%02x
)由printf
處理。上述代碼行可能僅在訂單被顛倒時才起作用:如果printf
先運行,之前您編譯該程序。所以不,它不起作用。
如果筆者曾打算寫文字字符,下面是更合理:
printf("%c", ((unsigned char *)code)[i]); // clumsy
putchar((unsigned char *)code)[i]); // simpler
所以,你知道無論是原作者只是typo'd和忘記一個\
(我犯類似的錯誤所有時間),或作者沒有線索。
注:
:一個錯誤意味着GCC不知道什麼的代碼是應該做的,因此繼續是不可能的。
這是一個很好的問題,但對人不對事的攻擊是不能容忍的 - 比如評論「或者也許它是你誰擁有的ASCII轉義字符認識不足?」 –
OP,你已經解釋了你的代碼出了什麼問題,並且你的迴應是傲慢地聲稱人們幫助你不知道他們在做什麼。這種態度是不會讓你遠在SO ... –