将程序参数复制到以空格分隔的std::字符串 我有一个Visual Studio 2008 C++应用程序,我想把所有的程序参数复制到一个空白区中的字符串中。i、 例如,如果我的程序被称为foo.exe\program Files,那么下面的文件夹字符串将包含\program Files

将程序参数复制到以空格分隔的std::字符串 我有一个Visual Studio 2008 C++应用程序,我想把所有的程序参数复制到一个空白区中的字符串中。i、 例如,如果我的程序被称为foo.exe\program Files,那么下面的文件夹字符串将包含\program Files,c++,C++,下面是我正在做的一个例子。我想知道是否有一个更短或更简单的方法来做这件事。是否有一种简单的方法来消除std::wstringstream变量 int _tmain( int argc, _TCHAR* argv[] ) { std::wstringstream f; std::copy( argv + 1, argv + argc, std::ostream_iterator< std::wstring, wcha

下面是我正在做的一个例子。我想知道是否有一个更短或更简单的方法来做这件事。是否有一种简单的方法来消除
std::wstringstream
变量

int _tmain( int argc, _TCHAR* argv[] )
{
    std::wstringstream f;
    std::copy( argv + 1,
               argv + argc,
               std::ostream_iterator< std::wstring, wchar_t >( f, L" " ) );
    std::wstring folder = f.str();

    // ensure the folder begins with a backslash
    if( folder[ 0 ] != L'\\' )
        folder.insert( 0, 1, L'\\' );

    // remove the trailing " " character from the end added by the std::copy() above
    if( *folder.rbegin() == L' ')
        folder.erase( folder.size() - 1 );

    // ... 
}
int-tmain(int-argc,_-TCHAR*argv[]
{
std::wstringstream f;
标准::复制(argv+1,
argv+argc,
std::ostream_迭代器(f,L“”);
std::wstring folder=f.str();
//确保文件夹以反斜杠开头
如果(文件夹[0]!=L'\\')
文件夹。插入(0,1,L'\\');
//从上面std::copy()添加的末尾删除尾随的“”字符
如果(*folder.rbegin()==L“”)
folder.erase(folder.size()-1);
// ... 
}
谢谢, 保罗

这个怎么样:

int main(int argc, char* argv[])
{
    std::string path;
    if(argc < 2)
    {
        std::cout << "Not enough arguments" << std::endl;
        return;
    }
    path = argv[1]; // Assignment works from char* types
    // Do the rest of your folder manipulation below here
}
intmain(intargc,char*argv[])
{
std::字符串路径;
如果(argc<2)
{
标准::cout
如果我的程序被称为
foo.exe\program Files
,那么下面的文件夹字符串将包含
\program Files

当用两个不同的参数调用程序时,您希望字符串也是
arg1 arg2

通常的处理方法是首先正确调用程序:

foo "\Program Files" foo“\Program Files”
这将使
argv[1]
包含
“\Program Files”

首先,请注意Thomas的评论-他的观点非常重要

现在,你可以找到参数的长度,并将它们做成一个字符串,这样(注意我的C++语法可能有点偏离,但是这个概念是:))< /P>

int-length=0;
对于(int i=1;i
处理带有空格的路径的常用方法是在命令行中将它们放在引号中。然后,您的程序将在
argc
中看到带有空格的路径作为单个条目,因此您不需要进行任何这种特殊处理。您可以尝试将其作为对用户的服务来进行处理,但如果您想添加命令行选项l呢ater?我会注意到,对于我下面接受的解决方案,Thomas的评论是必不可少的。您必须重复引用任何参数(路径)其中包含空格/空白。但是,双引号不会出现在程序中。这有一个
C++
标记,所以为什么不使用
std::string
,而不是手动摆弄字符缓冲区?(即使在C std库中也有复制字符串的函数。无需编写自己的函数。)
int length = 0;
for(int i = 1; i < argc; i++) {
    length += strlen(argv[i]);
}
// now add one for each require space
length += argc-2;

char* fullString = new char[length];
int ptr = 0;
for(int i = 1; i < argc; i++) {
    int strlen = strlen(argv[i]);
    for(int j = 0; j < strlen; j++) {
        fullString[ptr] = argv[i][j];
        ptr++;
    }
    fullString[ptr] = ' ';
    ptr++;
}