无法将argv传递给字符串

时间:2013-06-06 15:47:37

标签: c++ visual-c++

我是C ++编程的新手(自大学以来还没有完成10+)。我正在尝试编写一个非常基本的程序来获取已作为参数传递的文件名。我只是没有得到如何获取文件名。我正在使用VS2012 Exp for Desktop。

以下是我的代码。

#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;
}

3 个答案:

答案 0 :(得分:3)

替换此

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

wstring newfilename = argv[1];
newfilename += L".newext";

某些语言使用&进行字符串连接。 C ++没有。事实上,没有运算符连接字符串文字和字符指针:+因为字符串连接由字符串对象定义,并且只适用于它们。

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

答案 1 :(得分:3)

&amp;&amp; 不会将两个字符串添加到一起。 + 运算符可以。

此外,C ++根据左侧参数的类型决定使用多个 operator + 函数中的哪一个。这里有两种不同的类型, _TCHAR 字符串,字符串文字(“这是字符串文字”),类型为 char * ,你想把它放进一个wstring。

首先, _TCHAR char * 的类型不同,因此它应为 L“.newext”

其次,你不能添加两个 char *,因为这是添加两个指针,指针算术会做一些与你想要的不同的东西。因此,在开始添加内容之前,需要将第一个参数转换为 wstring

或者:

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

或者:

wstring myStr = wstring(argv[1]) + L".newext" + L"Additional stuff"

答案 2 :(得分:0)

me_attach_file.open (".mailexpress");

你应该将文件名传递给对象。

me_attach_file.open (newfilename);

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