-6

我目前正在学习如何处理命令行参数。我有一个程序需要调用另一个程序,都是用 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++:如何使用命令行参数

4

1 回答 1

0

除了您的代码未编译之外,还有一些明显的问题。void main()首先,在 C++中没有这样的东西。它必须返回一个int. 第二个问题是您要重新声明bufferstd::stringstream. 第三个问题是,您随后将其按值传递给sprintf将不起作用的第一个参数,因为它既不是 achar*也不是通过指针传递的。第四个问题是您试图将参数扩展为整数值 ( %i) 而不是 C 样式字符串 ( %s)。您还有两个参数格式说明符,但只传递一个。这个结果是未定义的,第二个%i可以扩展为任何值。

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

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

    system("pause");

    return 0;
}

要将 adouble作为参数传递,只需更改格式字符串中的打印说明符。

    double arg1 = 1.0f;
    sprintf(buffer, "C:\\system.exe %lf", arg1);

要传递多个参数,您需要包含一个额外的格式说明符并将参数传递给sprintf

    sprintf(buffer, "C:\\system.exe %s %s %i", arg1, arg2string, arg3int);

您的第二个程序也有问题,我认为它不会按您期望的方式执行。正如托马斯在他的评论中指出的那样,您将这些论点连接在一起,然后进行比较。如果您按原样执行它,system.exe hello therebaci似乎hello there是不正确的。由于您只想查看是否Hello已发送,因此您应该在循环中检查它,而不是连接字符串。

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");
}
于 2013-04-18T19:40:19.447 回答