2014-10-05 1 views
0

Коды для двух программ,Piping в окнах CMD не работает для двух программ, написанных на C

p1.c:

#include <stdio.h> 

int main() { 
    printf("Program1"); 
    return 0; 
} 

p2.c:

#include <stdio.h> 

int main (char argc, char *argv[]) {  
    printf("%s", argv[1]); 
    printf(" | Program2"); 
    return 0; 
} 

Когда p1 | p2 вводится в CMD, ожидаемый выход : Program1 | Program2. Но выход я получаю: (null) | Program 2. Очевидно, что выход p1 не принимается с p2. Как я могу решить эту проблему?

ответ

1

Вы не понимаете, как работает трубопровод. Чтобы что-то переделать во что-то другое, означает «использовать стандартный вывод программы один и обеспечить его стандартным вводом программы 2.» Используя argv, вы предполагаете, что вывод программы 1 идет на аргументы программы 2, и это неверно. Для получения результата вы должны указать scanf (или некоторый эквивалент) stdin.

Либо это, либо вам нужно вызвать p1 таким образом, чтобы его выход получался в качестве аргумента.

+0

Это сработало! Кстати, как я могу вызвать p1 таким образом, чтобы его вывод попадал в p2 в качестве аргумента? – sope

+0

| является символом CMD exe. Это ничего не значит для любой программы, кроме CMD.EXE. При использовании | то CMD.exe должен интерпретировать его. Я ссылаюсь на его использование в p2.c. – Noodles

+0

По http://stackoverflow.com/questions/2768608/batch-equivalent-of-bash-backticks Я бы предложил 'for/f% a in ('p1') сделать p2% a'. Если в пакетном файле, не забудьте использовать %% вместо%. – keefer

 Смежные вопросы

  • Нет связанных вопросов^_^