모든 프로그램 인수를 공백으로 구분 된 문자열로 복사하려는 Visual Studio 2008 C++ 응용 프로그램이 있습니다. 즉, 내 프로그램이 foo.exe \Program Files
으로 호출 된 경우 아래공백 문자로 프로그램 인수 복사 std :: string
아래에 내 folder
문자열이 포함됩니다. 아래는 내가 지금하고있는 일례입니다. 나는 이것을하는 더 짧거나 쉬운 방법이 있는지 궁금 해서요. 변수 std::wstringstream
을 쉽게 제거 할 수 있습니까?
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
}
작동합니다 : 이것에 대해 어떻게
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);
// ...
}
감사합니다, PaulH
공백이있는 경로를 처리하는 일반적인 방법은 명령 줄에 따옴표를 넣는 것입니다. 그러면 프로그램은 공백이있는 경로를'argc'의 단일 엔트리로 볼 것이므로이 특별한 처리를 할 필요가 없습니다. 이 작업을 사용자에게 제공하려는 것일 수 있지만 나중에 명령 줄 옵션을 추가하려는 경우 어떻게해야합니까? – Thomas
아래에서 필자가 받아 들인 솔루션에 대해서는 Thomas의 코멘트가 필수적이라는 점에 유의할 것입니다. 반드시 공백/공백이있는 인수 (경로)를 큰 따옴표로 묶어야합니다. 그러나 큰 따옴표는 프로그램 안에 존재하지 않습니다. –