在Win32控制台应用程序中读取命令行参数时出错?

时间:2014-02-03 02:55:06

标签: c++ winapi command-line-arguments

我需要帮助,因为在尝试读取命令行参数时,我没有得到预期的输出。这很奇怪,因为我将代码复制并粘贴到常规控制台应用程序中,并且按预期工作。值得注意的是,我正在运行Windows 7,在visual studio中我将命令行参数设置为test.png

Win32代码:

#include "stdafx.h"

using namespace std;

int _tmain(int argc, char* argv[])
{
    //Questions: why doesn't this work (but the one in helloworld does)
    //What are object files? In unix I can execute using ./ but here I need to go to debug in top directory and execute the .exe
    printf("hello\n");
    printf("First argument: %s\n", argv[0]);
    printf("Second argument: %s\n", argv[1]);

    int i;
    scanf("%d", &i);

    return 0;
}

输出:

hello
First Argument: C
Second Argument: t

我尝试创建一个简单的控制台应用程序,它可以工作:

#include <iostream>

using namespace std;

int main(int arg, char* argv[])
{
    printf("hello\n");
    printf("First argument: %s\n", argv[0]);
    printf("Second argument: %s\n", argv[1]);

    int i;
    scanf("%d", &i);

    return 0;
}

输出:

hello
First Argument: path/to/hello_world.exe
Second Argument: test.png

有谁知道发生了什么事?

1 个答案:

答案 0 :(得分:3)

_tmain只是一个宏,根据你是用Unicode还是ASCII编译而改变,如果它是ASCII,那么它将放置main,如果它是Unicode,那么它将放置{{1} }

如果你想要接受Unicode中的命令行参数的正确的Unicode声明,那么你必须声明它接受这样的Unicode字符串:

wmain

您可以阅读更多相关信息here

您的代码的另一个问题是int wmain(int argc, wchar_t* argv[]);需要ASCII C Style字符串而不是Unicode。使用printf或使用wprintf打印Unicode样式字符串。

std::wcout