从控制台应用中的命令行参数获取文件名C++

Grabbing file name from a command line argument in C++ console app

本文关键字:参数 获取 文件名 C++ 命令行 控制台 应用      更新时间:2023-10-16

我有一个控制台应用程序,它接受几个命令行参数,其中一个是文件名,并输出一个不同的文件。

我想从参数中提取名称,以便我可以将其合并到输出文件名中。例如,我从 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*"转换为"字符*">

这意味着_TCHARchar不是同一类型(_TCHAR实际上是wchar_t的typedef(。这也意味着argv属于 _TCHAR** 型。所有这些都意味着您已经创建了一个Microsoft Unicode 项目。

这是 MS 对 C 的一个非常非标准的扩展,用于使您的程序能够识别 Unicode。例如,您有一个_tmain函数,而不是main函数,它实际上是一个宏,根据项目的 Unicode 选项,它不断扩展到 wmainmain。 这些功能的原型将是 int wmain(int argc, wchar_t **argv)int main(int argc, char **argv) .

您基本上有两个选择:

  • 禁用项目选项中的所有 UNICODE 选项。然后,_TCHAR将恢复其对char的分类定义,一切都将正常。但是你会失去Unicode功能。
  • 以 UNICODE 方式执行。然后你应该用std::wstring代替std::stringwchar_t代替charL"hello"代替"hello"等。这种方式是疯狂的!