2013-02-27 16 views
6

Esiste un modo per immettere caratteri esadecimali non ascii su un scanf che utilizza %s? Sto cercando di inserire caratteri esadecimali come \x08\xDE\xAD e così via (per dimostrare l'overflow del buffer).Immissione di caratteri non ASCII per scanf ("% s")

L'input non è un parametro della riga di comando, ma un scanf all'interno del programma.

+0

Quindi perché non 'fprintf (" \ 0xDE ")' all'input standard del programma? –

+2

Se è possibile digitare quei caratteri sulla tastiera, dovrebbe funzionare. Altrimenti, un reindirizzamento, './a.out

+0

La mia prima modifica non è andata a buon fine. Quello che stai dicendo funzionerà se l'input fosse un argomento della riga di comando. Questo tuttavia non è un argomento della riga di comando. E i caratteri che voglio stampare non sono stampabili. – asudhak

risposta

1

Quando si dice "ad un scanf()", presumibilmente ci sono altri dati oltre a questo da fornire. Funzionerebbe per avere un programma, forse uno script Perl o Python, generare i dati e scrivere i caratteri non-ASCII all'ingresso standard del programma? Se hai bisogno di un input standard per apparire come un terminale, allora dovresti investigare su expect che lo gestisce per te. Questo è un modo comune di affrontare il problema.

2

Presumo che si desideri alimentare dati arbitrari su stdin (poiché si legge con scanf).

È possibile utilizzare la shell per creare i dati e inserirli nel programma, ad es.

printf '\x08\xDE\xAD' | yourprogram 

noti che questo funziona solo finché ci sono spazi vuoti da alimentare (perché scanf con un formato %s ferma a spazi bianchi).

+0

Se sei su Windows e non hai il comando 'printf', crea un file e reindirizza' stdin' ad esso: 'yourprogram anatolyg

Problemi correlati