2013-02-27 18 views
6

%sを使用するscanfに非ASCII 16進文字を出力する方法はありますか?私は\x08\xDE\xADのような16進数の文字を挿入しようとしています(バッファオーバーフローを示すため)。scanf( "%s")に非ASCII文字を入力

入力はコマンドラインパラメータではなく、プログラム内部のscanfです。

+0

なぜ、あなたのプログラムの標準入力に 'fprintf(" \ 0xDE ")しないのですか? –

+2

これらの文字をキーボードに入力することができれば、それはうまくいくはずです。それ以外の場合は、リダイレクト、 './a.out

+0

私の最初の編集が終わりませんでした。入力がコマンドライン引数だった場合、あなたが言っていることはうまくいくでしょう。これはコマンドライン引数ではありません。そして、私が印刷したい文字は印刷可能ではありません。 – asudhak

答えて

1

scanf()」と言うと、おそらくこれ以外のデータが提供されている可能性があります。プログラム、おそらくPerlやPythonスクリプトを使ってデータを生成し、非ASCII文字をプログラムの標準入力に書き込むことはできますか?端末のように見えるように標準入力が必要な場合は、それを扱うexpectを調査する必要があります。これは問題に対処する一般的な方法です。

2

私はあなたがscanfと読んでいるので、stdinに任意のデータを送りたいと思っています。

シェルを使用してデータを作成し、プログラムにパイプすることができます。

printf '\x08\xDE\xAD' | yourprogram 

%s形式でscanfが空白で停止するため)、これは唯一限り供給すべき空白文字が存在しないように動作することに注意してください。

+0

Windows上で 'printf'コマンドがない場合は、ファイルを作成して' stdin'を 'your program anatolyg

関連する問題