从控制台应用中的命令行参数获取文件名C++
Grabbing file name from a command line argument in C++ console app
我有一个控制台应用程序,它接受几个命令行参数,其中一个是文件名,并输出一个不同的文件。
我想从参数中提取名称,以便我可以将其合并到输出文件名中。例如,我从 potato.txt 开始,当我运行可执行文件时,它会输出 1234potato.txt。如果我再次使用 tomato.txt 运行它,它将输出 1234tomato.txt。
我遇到的问题是
*argv[1] //only gets the first char of "potato.txt"
我需要一种方法来抓住整个东西。人们通常如何做到这一点?非常感谢。
C++ char*
中是字符串,就像在 C 中一样,因为字符串是字符数组,数组有时使用指向其第一个成员的指针进行处理。但是,如果您取消引用指针,则只会获得第一个字符。改为:
std::string(argv[1])
或者,根据上下文,您可以直接使用argv[1]
。许多可以将字符串作为参数的函数也可以采用const char *
。即使它们没有重载,在大多数情况下,编译器也会为您添加一个临时变量。
或者,如果要为变量指定一个有意义的名称:
char *filename = argv[1];
或者,如果你想要一个变量并使用string
类:
std::string filename(argv[1]);
更新:从下面的评论中,您有以下错误:
C2440:"正在初始化":无法从"_TCHAR*"转换为"字符*">
这意味着_TCHAR
和char
不是同一类型(_TCHAR
实际上是wchar_t
的typedef(。这也意味着argv
属于 _TCHAR**
型。所有这些都意味着您已经创建了一个Microsoft Unicode 项目。
这是 MS 对 C 的一个非常非标准的扩展,用于使您的程序能够识别 Unicode。例如,您有一个_tmain
函数,而不是main
函数,它实际上是一个宏,根据项目的 Unicode 选项,它不断扩展到 wmain
或 main
。 这些功能的原型将是 int wmain(int argc, wchar_t **argv)
或 int main(int argc, char **argv)
.
您基本上有两个选择:
- 禁用项目选项中的所有 UNICODE 选项。然后,
_TCHAR
将恢复其对char
的分类定义,一切都将正常。但是你会失去Unicode功能。 - 以 UNICODE 方式执行。然后你应该用
std::wstring
代替std::string
,wchar_t
代替char
,L"hello"
代替"hello"
等。这种方式是疯狂的!
- lambda参数转换为constexpr技巧,然后获取带链接的数组
- 如何从"decltype()"获取函数参数的数量<funtion>?
- 有没有办法在从编译器获取参数时避免预处理器宏?
- C++ - 声明指向返回任何类型并获取任意数量参数的函数的指针
- 如何从参数中获取函数签名?
- 获取可变参数模板参数包的相关类型
- 在 C++11 中获取函子作为参数
- 如何使用可变参数模板获取参数的变量号及其大小C++
- 是否可以获取成员函数模板参数的拥有对象?
- 如何从 x64 程序集中的堆栈中获取参数?
- 获取第一个模板参数的可靠方法
- 如何从参数包获取指向对象的指针
- C++ 如何使派生类自动获取基类参数
- 通过命令行参数获取llvm ir文件时面临问题
- 在C++中,是否允许将函数指针强制转换为将指向基类或派生类的指针作为参数获取的函数指针
- 使用一个可选参数获取两个参数到main
- cpp 映射作为函数参数获取警告信息 "discards qualifiers"
- 从控制台应用中的命令行参数获取文件名C++
- 从模板参数获取函数参数
- 使用参数获取其他参数