我正在为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
任何帮助都会受到赞赏。
答案 0 :(得分:0)
因为您的程序是Unicode。 您应该将主语法更改为:
int _tmain(int argc, wchar_t* argv[])
在Unicode中,每个字符都有两个字节。对于英文字符,第二个字节始终为NULL。
答案 1 :(得分:0)
听起来您正试图将UTF-16个字符解释为ASCII。您是否将代码编译为Unicode? p>
如果您需要将参数作为ASCII,请将代码编译为ASCII,或保留_TCHAR*
并使用WideCharToMultiByte()
转换参数。