Você deve poder apenas
echo 'string' | ./a.out
O shell fará com que a tubulação seja feita corretamente, e seu programa simplesmente lerá a partir de sua entrada padrão.
O que você está tentando é um redirecionamento altamente não portátil , não um canal.
Além disso, lembre-se de verificar o código de retorno de scanf()
e certifique-se de que seu buffer de entrada seja grande o suficiente para manter a entrada. O ideal é usar uma string de formato que restrinja o número de caracteres lidos, por exemplo, %9s
ou algo semelhante no seu exemplo.