这是我在该网站上的第一个问题,尽管我来这里参考已经有一段时间了。我知道 argv[0] 存储程序的名称,其余命令行参数存储在剩余的 argv[k] 槽中。我还了解 std::cout 将字符指针视为空终止字符串并打印该字符串。下面是我的程序。
#include "stdafx.h"
#include <fstream>
#include <iostream>
using namespace std;
int _tmain(int argc, _TCHAR* argv[])
{
cout << argv[0] << " ";
cout << argv[1] ;
return 0;
}
根据我在本期互联网搜索中看到的所有其他程序,该程序应该打印出两个字符串,即。程序名称和命令行参数。控制台窗口显示
0010418c 001048d6
我相信这些是分别指向 argv[0] 和 argv[1] 的指针。
我唯一的命令行争论是“nanddumpgood.bin”,它出现在 argv[1] 中,如果我在调试时将鼠标悬停在 argv[] 数组上,它会正确显示字符串。
这是什么情况?我究竟做错了什么?我明白,在特殊情况下数组会衰减为指针?这是没有的情况吗?
我也明白std::cout
将字符指针视为以空结尾的字符串并打印该字符串。
That's mostly正确的。它适用于char*
,但不是其他类型的字符。这正是问题所在。你有一个_TCHAR*
,即char*
在 ANSI 版本上,但不在 Unicode 版本上,因此您不会获得特殊的字符串行为,而是获得默认的指针行为。
我明白,在特殊情况下数组会衰减为指针?这是没有的情况吗?
argv
是一个数组,但两者都不是argv[0]
nor argv[1]
都是数组,它们都是指针。腐烂不是这里的一个因素。
最简单的修复方法是使用int main(int argc, char* argv[])
这样您就可以获得命令行参数的非 Unicode 字符串。我推荐这个,而不是切换到wcout
,因为它与您在互联网上找到的其他代码更兼容。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)