Char Star Array参数未正确终止

时间:2013-12-29 04:59:19

标签: c++ char sizeof

我正在为Windows控制台编写一个C ++应用程序,它获取参数并将它们“转换”为char * []。意思是我改变了这个:

int _tmain(int argc, _TCHAR* argv[])

到此:

int _tmain(int argc, char* argv[])

现在当我解析它时,我似乎无法找到每个参数的结尾。如果我得到argv [1]它只返回破折号(' - ')。我尝试使用sizeof循环遍历字符:

    for(j=0; j<sizeof(argsIn[i]); j++)
    {
        std::cout<<argsIn[i][j];
    }

此处的输出将在每个字符之间放置空格,并且如果命令为>cmd.exe -d frank则每次输出恰好总共4个字符,当i = 3时,这将输出f r。我也试过像这样检查null charcter:

    while(argsIn[i][j] != '\0')
    {
        std::cout<<argsIn[i][j];
        j++;
    }

此方法仅输出第一个字符。所以在上面的例子中,当i = 3时我们只会得到f任何帮助都会受到赞赏。

2 个答案:

答案 0 :(得分:0)

因为您的程序是Unicode。 您应该将主语法更改为:

int _tmain(int argc, wchar_t* argv[])

在Unicode中,每个字符都有两个字节。对于英文字符,第二个字节始终为NULL。

答案 1 :(得分:0)

听起来您正试图将UTF-16个字符解释为ASCII。您是否将代码编译为Unicode?

如果您需要将参数作为ASCII,请将代码编译为ASCII,或保留_TCHAR*并使用WideCharToMultiByte()转换参数。