0
在我的項目(因技術原因不能依賴於任何外部庫或第三方來源)我已經設置了以下test.h
:如何使printf()正確地從宏內打印二進制blob?
static int rc = 0;
#define TESTCASE(x) if (x) {} \
else \
{ \
rc += 1; \
printf("FAILED: " __FILE__ ", line %d - " #x "\n", __LINE__); \
}
也能正常工作的大部分時間 - 如果測試用例評估爲真,沒有任何反應。如果測試用例評估爲false,則打印測試用例包括文件名和行號。
但是,當測試用例包含字符串文字時,TESTCASE宏中的printf()
堅持將字符串字面解釋爲格式字符串的一部分(這對於某個測試用例來說是致命的)。
現在我正在想方設法讓printf()
逐字打印x
(測試用例)中的任何內容,但我已經空了。最接近的是使用%c
打印固定數量的字符,並將文本(#x
)作爲參數傳遞給printf()
- 但我無法弄清楚如何確定#x
的大小,特別是如果它包含零字節(其中排除任何使用strlen()
)。
困惑,無所適從。幫幫我?
一個很好的第一個appriach,但是如果#x中的字符串文字包含零字節呢? – DevSolar 2010-06-24 09:36:13
我不認爲這是可能的:零字節沒有表示,它在C源文件中無效,因此不能出現在你的測試用例中。 (或者在你的問題中'TEST_CASE'宏的定義是錯誤的),請記住'#'預處理器運算符是一個字符串化器,它會將'abc'轉換爲''abc「'在宏參數中直接出現的字符串。 – 2010-06-24 09:48:42
我在這裏輸入了一半的內容「嘿,我意識到'\ 0'是零字節的*表示*,而不是事物本身,我可以隨時將字符串'\ 0'寫入字符串'。 AAaaargh ......我的大腦一半已經睡着了。當然,你絕對是對的。 – DevSolar 2010-06-24 09:51:03