【问题标题】:How to pass an argument from a c++ program to cmd?如何将参数从 c++ 程序传递给 cmd?
【发布时间】:2012-02-25 06:22:25
【问题描述】:

我正在尝试使用用户的输入作为将传递给 cmd 的参数...

我知道要在我的程序中使用 cmd,我需要使用这个:

system("SayStatic.exe hello world");

但这正是我需要的:

char item[100];
gets(item);
//after getting the input I need to pass it to SayStatic.exe that is the part I dont know

我知道我不能使用 sysytem();为此,但像 spawnl() 或 execl() 之类的其他方法会起作用吗?

【问题讨论】:

  • 为什么不能使用system()
  • 我需要参数是一个变量
  • 不要永远使用gets作为输入,这是一个巨大的漏洞,很容易用于缓冲区溢出。无论如何,C++ 程序员应该使用iostream 的东西,而不是cstdio 的东西。

标签: c++ command-line cmd


【解决方案1】:

首先,永远不要使用gets()。它不应该包含在标准库中,因为比字符串长的输入会覆盖堆栈内存并导致未定义的行为(可能是某种崩溃)。如果您使用 C 字符串,fgets() 是可接受的替代品。

您可以使用这样的 C++ 字符串来做到这一点:

std::string line;
std::getline(std::cin, line);
system(("SayStatic.exe " + line).c_str());

【讨论】:

  • 它是否应该被包含是有争议的 - ANSI 的任务是编纂现有的实践而不是设计一种新的语言,并且 ISO 非常重视向后兼容性。毋庸置疑的是,我们永远不应该使用它 :-) 无论如何,+1 用于解决问题,尤其是在不使用 sprintf 等人的情况下。
猜你喜欢
  • 1970-01-01
  • 2014-01-07
  • 2022-01-05
  • 2018-09-29
  • 1970-01-01
  • 1970-01-01
  • 2020-05-29
  • 2010-10-04
  • 1970-01-01
相关资源
最近更新 更多