我有以下的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
系統上的管路工作正常 - 我試圖在一些其他程序。
我試着創建一個vs項目並從那裏編譯代碼 - 什麼也沒有幫助。
最新錯了,鋤頭可以修復嗎?
我使用vs2010工具在win7上運行。
我'cin.getline'試圖將數據retrive成'的char *'。它沒有工作。兩者之間有真正的區別嗎? – elyashiv
是的,std :: string是用於在C++中存儲字符串的對象。內存是爲您管理的,並且內置了很多不錯的方法。 'char *'是指向一些你必須自己管理的字符的指針。我強烈要求你用C++編寫時使用std :: string。如果你決定使用'char *',那麼看看http://stackoverflow.com/questions/4023895/how-to-read-string-entered-by-user-in-c – Steve