我发现了一个新的范例:系统

时间:2013-04-18 19:15:41

标签: c++

我目前正在学习如何处理命令行参数。我有一个程序需要调用另一个程序,都是用C ++编写的。我有一台Windows电脑。这是程序

#include "stdafx.h"
#include <iostream>
#include <sstream>

using namespace std;

void main()
{   
    char buffer[200];
    char arg1[6]="Hello";
    std::stringstream buffer;
    sprintf(buffer, "C:\system.exe %i %i", arg1);
    system(buffer);     

    system("pause");
}

我需要调用以下程序:

#include "stdafx.h"
#include <iostream>
#include <iomanip>
#include <string>

using namespace std;

void main(int argc, char*argv[])
{       
    string baci;        
    for(int i = 1; i < argc; i++)
        baci += argv[i];

    if (baci=="Hello")
        cout << "Francesco, ti mando 4 baci !!!" << endl;   

    system("pause");
}

它没有正确创建命令行,我无法弄清楚原因。任何人都可以帮助并解释为系统可执行文件使用双参数所需的任何变化吗?书籍和网络对此程序不是很详细。我发现体面的只是这个,但我无法将它用于我的目的。 C++: How to use command line arguments

1 个答案:

答案 0 :(得分:0)

除了你的代码没有编译之外,还有一些明显的问题。首先,在C ++中没有void main()这样的东西。 必须返回int。第二个问题是您将buffer重新声明为std::stringstream。第三个问题是,然后你将它作为sprintf的第一个参数传递给char*的第一个参数,因为它既不是%i也不是由指针传递。第四个问题是您尝试将参数扩展为整数值(%s)而不是C样式字符串(%i)。您还有两个参数格式说明符,但只传递一个。结果是未定义的,第二个int main() { char buffer[200]; char arg1[6]="Hello"; sprintf(buffer, "C:\\system.exe %s", arg1); system(buffer); system("pause"); return 0; } 可以扩展为任何值。

您的代码应该看起来像这样......

double

要传递 double arg1 = 1.0f; sprintf(buffer, "C:\\system.exe %lf", arg1); 作为参数,只需更改格式字符串中的print specifier

sprintf

要传递多个参数,您需要包含一个额外的格式说明符,并将参数传递给 sprintf(buffer, "C:\\system.exe %s %s %i", arg1, arg2string, arg3int);

system.exe hello there

你的第二个程序也有问题,我认为它不会以你期望的方式执行。正如托马斯在评论中指出的那样,你将这些论点连接在一起然后进行比较。如果您将其baci执行,则hello thereHello,这似乎不正确。由于您只想查看是否已发送void main(int argc, char*argv[]) { for(int i = 1; i < argc; i++) if (0 == strcmp(argv[i], "Hello")) cout << "Francesco, ti mando 4 baci !!!" << endl; system("pause"); } ,您应该在循环中检查它而不是连接字符串。

{{1}}