2013-02-27 111 views
6

有沒有辦法可以將非ASCII字符發送到使用%s的scanf?我試圖插入像\x08\xDE\xAD等十六進制字符(以演示緩衝區溢出)。將非ASCII字符輸入到scanf(「%s」)

輸入不是指向命令行參數,而是指向程序中的scanf。

+0

那麼爲什麼不'fprintf(「\ 0xDE」)'到你的程序的標準輸入? – 2013-02-27 22:44:30

+2

如果您可以在鍵盤上鍵入這些字符,那應該可以工作。否則,重定向,'./a.out 2013-02-27 22:44:39

+0

我的第一個編輯沒有通過。如果輸入是命令行參數,你所說的將會起作用。然而,這不是命令行參數。我想打印的字符不是可打印的。 – asudhak 2013-02-28 00:14:16

回答

1

當你對'scanf()'說',可能還有其他數據不僅僅是這個提供。它是否可以運行一個程序,可能是Perl或Python腳本,生成數據並將非ASCII字符寫入程序的標準輸入?如果您需要標準輸入以像終端一樣出現,那麼您應該調查expect,它可以爲您處理。這是處理這個問題的常用方法。

2

我假設你想輸入stdin上的任意數據(因爲你使用scanf來閱讀)。

您可以使用shell創建數據並將其傳送到您的程序中,例如,

printf '\x08\xDE\xAD' | yourprogram 

請注意,這隻會只要沒有空白字符被輸送(因爲scanf%s格式停在白色的空間)工作。

+0

如果你使用的是Windows,並且沒有'printf'命令,則創建一個文件並將'stdin'重定向到它:'yourprogram anatolyg 2015-10-21 10:13:23