我有以下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
系统上的管道工作正常 - 我在其他一些程序上尝试过。
我尝试创建一个vs项目并从那里编译代码 - 没有任何帮助。
什么是错的,我可以修理它吗?
我使用vs2010工具在win7上运行。
答案 0 :(得分:3)
当你管道时,传递给你的程序的信息是在stdin上,而不是argv
答案 1 :(得分:0)
当你管道到另一个程序时,它转到标准输入而不是main中的参数。
这段代码会打印出stdin
到stdout
的内容,试试这个:
for (std::string line; std::getline(std::cin, line);) {
std::cout << line << std::endl;
}