can';无法让argv传递到字符串 我是C++编程新手(自从10年以来就没有在C++中做过)。我正在尝试编写一个非常基本的程序来获取一个已经被作为参数传递的文件名。我只是不知道如何获取文件名。我正在为桌面使用VS2012 Exp

can';无法让argv传递到字符串 我是C++编程新手(自从10年以来就没有在C++中做过)。我正在尝试编写一个非常基本的程序来获取一个已经被作为参数传递的文件名。我只是不知道如何获取文件名。我正在为桌面使用VS2012 Exp,c++,visual-c++,C++,Visual C++,下面是我的代码 #include "stdafx.h" #include <fstream> #include <iostream> #include <xstring> #include <string> //using namespace openutils; using namespace std; int _tmain(int argc, _TCHAR* argv[]) { wcout << "customconso

下面是我的代码

#include "stdafx.h"
#include <fstream>
#include <iostream>
#include <xstring>
#include <string>

//using namespace openutils;
using namespace std;

int _tmain(int argc, _TCHAR* argv[])
{
    wcout << "customconsole app has "<< argc <<" arguments passed.  second one is:  " << argv[1];
    ofstream me_attach_file;
    wstring newfilename = argv[1] && ".newext";
    me_attach_file.open (".mailexpress");
    me_attach_file << "Writing this to a file.\n";
    me_attach_file.close();
return 0;
}
#包括“stdafx.h”
#包括
#包括
#包括
#包括
//使用名称空间openutils;
使用名称空间std;
int _tmain(int argc,_TCHAR*argv[]
{
wcout替换此

wstring newfilename = argv[1] && ".newext";

<>一些语言使用了代码>和代码>字符串连接。C++没有。实际上,没有连接字符串文字和字符指针的操作符:<代码> +/>代码>字符串连接是由字符串对象定义的,只与它们一起工作。

此外,字符串文字必须以
L
作为前缀,以使用宽字符,并与
wstring
兼容。替换此字符串

wstring newfilename = argv[1] && ".newext";

<>一些语言使用了代码>和代码>字符串连接。C++没有。实际上,没有连接字符串文字和字符指针的操作符:<代码> +/>代码>字符串连接是由字符串对象定义的,只与它们一起工作。

此外,字符串文字必须以
L
作为前缀,以使用宽字符,并与行中的
wstring
兼容

me_attach_file.open (".mailexpress");
您应该将文件名传递给对象

me_attach_file.open (newfilename);
在您的版本中,ofstream将打开一个名为“.mailexpress”且没有前缀的文件(在unix系统上隐藏)。

行中

me_attach_file.open (".mailexpress");
您应该将文件名传递给对象

me_attach_file.open (newfilename);

在您的版本中,ofstream将打开一个名为“.mailexpress”的文件,但不带前缀(在unix系统上隐藏)。

&&不会将两个字符串添加在一起。+运算符会添加

C++还决定了左边的参数类型中使用的< <强>运算符+<强>函数中的哪一个。这里有两种不同的类型:<强> > Tchar 字符串,字符串类型(“这是字符串文字”),类型是“强> char *<强>,并且希望将其放入WString中。

首先,一个\u TCHARchar*不是同一类型,所以它应该是L.newext“

第二,您不能添加两个字符,因为这是添加两个指针,而指针算术执行的操作与您想要的不同。因此,在开始添加内容之前,需要将第一个参数转换为wstring

要么:

wstring myStr = argv[1];
myStr += L".newext"
或:


&&不会将两个字符串相加。+运算符会将两个字符串相加

C++还决定了左边的参数类型中使用的< <强>运算符+<强>函数中的哪一个。这里有两种不同的类型:<强> > Tchar 字符串,字符串类型(“这是字符串文字”),类型是“强> char *<强>,并且希望将其放入WString中。

首先,一个\u TCHARchar*不是同一类型,所以它应该是L.newext“

第二,您不能添加两个字符,因为这是添加两个指针,而指针算术执行的操作与您想要的不同。因此,在开始添加内容之前,需要将第一个参数转换为wstring

要么:

wstring myStr = argv[1];
myStr += L".newext"
或:


好的……是的,我应该先检查连接……可能已经找到了。谢谢!!这就解决了!!
std::wstring(argv[1])+L。我会使用newext“
。@MooingDuck:为什么?我特别考虑了这一点,并选择不使用它。(它会创建一个或两个额外的临时变量。)+但关于临时文件:编译器肯定会对其进行优化。在C++11中,这不是一个移动构造,因为临时文件将被“移动”到“newFilename”中吗?这几乎不值得关注。特别是因为这里的瓶颈是无论如何都要访问文件的硬盘。@BenVoigt:您的建议调用
std::wstring(const wchar\u t*)
,然后
std::wstring::operator+(const wchar\u t*)
。最佳。我的建议调用
std::wstring(const wchar\u t*)
,然后
operator+(std::wstring&,const wchar\u*)
,然后理论上
std::ring(std::wstring&&str)
两次,但由于RVO,只能调用一个。另一个不能忽略。虽然您的代码避免了移动,但我仍然希望它在一行上。好的……是的,我应该先检查连接……可能会找到它。谢谢!!这就解决了!!
std::wstring(argv[1])+L.newext
是我会使用的。@MooingDuck:为什么?我特别考虑了这一点,并选择不使用它。(它会创建一个或两个额外的临时文件。)+但关于临时文件:编译器肯定会对其进行优化。在C++11中,这不是一个移动构造,因为临时文件将被“移动”到“newFilename”中吗?这几乎不值得关注。特别是因为这里的瓶颈是无论如何都要访问文件的硬盘。@BenVoigt:您的建议调用
std::wstring(const wchar\u t*)
,然后
std::wstring::operator+(const wchar\u t*)
。最佳。我的建议调用
std::wstring(const wchar\u t*)
,然后
operator+(std::wstring&,const wchar\u*)
,然后理论上
std::ring(std::wstring&&str)<代码>两次,但由于RVO只能调用一个,另一个不能被调用。虽然代码避免了移动,但我还是喜欢在一行上。“VisualC++ 2012中的<代码> STD::OFFROWS 取一个<代码> STD::WSCONT/<代码>文件名?我不这么认为……虽然我确实希望这样做。但是,在Visual中,<代码> STD::OFFROWS <代码>C++ 2012使用了<代码> STD::WScGe>代码>我不这么认为……虽然我确实希望它能。