Visual Studio 2010 — Windows трубопроводов к программе C ++

У меня есть следующая программа на C ++:

#include <iostream>
using namespace std;

//will find the last dot and return it's location
char * suffix_location(char *);

int main(int argc, char* argv[])
{
if (argc < 2)
{
cout << "not enough arguments!" << endl;
for (int i = 0; i < argc; i++)
cout << argv[i] <<endl;
exit(1);
}
//ignore first parameter (program name).
argv ++;
argc --;

//the new suffix
char * new_suffix = argv[0];

argv++;
argc--;

for (int i = 0; i < argc; i++)
{
char * a = suffix_location(argv[i]);
if (a != NULL)
{
a[0] = NULL;
cout << argv[i] << '.' << new_suffix << endl;
}
}
return 0;
}

char * suffix_location(char * file_name)
{
char * ret = NULL;
for (; * file_name; file_name++)
if (*file_name == '.')
ret = file_name;
return ret;
}

Я скомпилировал его с помощью следующей команды:

cl /EHsc switch_suffix.cpp

когда я бегу

switch_suffix py a.exe b.txt

Я получил:

a.py
b.py

как и ожидалось.
проблема начинается, когда я пытаюсь трубить. работает следующее:

dir /B | swich_suffix py

ничего не дает, и работает

 dir /B | swich_suffix py

Результаты:

not enough arguments!
switch_suffix

Трубопровод в системе работает нормально — я попробовал это на нескольких других программах.
Я пытался создать проект против и компиляции кода оттуда — ничего не помогло.

что не так, и как я могу это исправить?

Я работаю на win7, используя инструменты vs2010.

0

Решение

Когда вы передаете по конвейеру другую программу, она идет на стандартный ввод, а не на аргументы в main.

Этот кусок кода распечатывает то, что он получает на stdin в stdout, попробуй это:

for (std::string line; std::getline(std::cin, line);) {
std::cout << line << std::endl;
}
0

Другие решения

когда вы передаете по каналу, информация, которая передается вашей программе, находится на stdin, а не на argv

3

По вопросам рекламы [email protected]