2013-11-20 3 views
0

Я написал небольшую программу на C, которая принимает 3 целых числа в качестве аргументов. Если я бегу это так: myapp 1 2 3 проходит нормально, argc показывает правильно 4, но если я делаю: echo 1 2 3 | myapp, ARGC показывает только 1.Передача нескольких аргументов программе C

Соответствующая часть кода C является:

#include <stdio.h> 
#include <stdlib.h> 
#include <unistd.h> 

int main(int argc, char **argv) 
{ 
printf("Entered: %i\n", argc); 
if (argc < 4) 
{ 
printf("You must enter 3 integers as command line arguments!\n"); 
exit(1); 
} 
} 

Что это неправильно?

ответ

3

Труба передает выход первого процесса в stdin второго процесса, который не имеет ничего общего с аргументами командной строки. Что вы хотите xargs, который использует выход первого процесса и использует ее в качестве аргументов командной строки:

echo 1 2 3 | xargs myapp 
+0

Да, я устал, я забывал xargs ... Ой! :) Я согласен, что вы ответите как можно скорее. – Frantique

4

echo 1 2 3 | myapp звонки myapp без аргументов. Значения передаются через stdin.

Вы можете использовать это вместо того, чтобы (при использовании Баша в Unix):

myapp `echo 1 2 3` 

Или, если у вас есть список номеров в файл с именем numbers.txt, вы можете сделать это, а также:

myapp `cat numbers.txt` 
0

echo 1 2 3 | myapp пошлет 1 2 3 для стандартного ввода вашей программы. Если ваша программа не читает, она никогда не увидит эти цифры. Для этого вам нужно использовать, например, scanf. Обратите внимание, что вам придется самостоятельно анализировать строку, чтобы подсчитать количество аргументов, переданных таким образом.

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