我正在使用visual studio 2010在Windows上制作C程序。
我将wchar_t数组传递给函数。
//in main
wchar_t bla[1024] = L"COM6";
mymethod(bla);
static void mymethod(wchar_t *bla) {
//do stuff
}
我使用调试器来观察bla,sizeof(bla)并注意到在main中,bla的类型为wchar_t
和sizeof(bla) = 2048
,但在mymethod中,bla的类型为unsigned short*
,有sizeof(bla) = 4
。
为什么会这样?
我想将bla传递给方法,以便该方法可以更改数组而不是返回已编辑的数组。但是,swprintf无法工作,因为我希望sizeof(bla)为1024而不是4。
干杯。
答案 0 :(得分:1)
在main中你正在计算数组的大小:
sizeof(bla); // 1024 * sizeof(unsigned short) = 2048
在函数中,如果使用sizeof,则计算指针的大小(以字节为单位):
sizeof(bla); //means sizeof (wchar_t *) = 4
答案 1 :(得分:0)
我发现VS2010中的参数函数类型为wchar_t
很奇怪,因为wchar_t
只是unsigned short
的typedef,所以很长一段时间。差异大小是显而易见的,因为一个是数组而另一个是指针。如果这是C ++,你可以参考数组。您将无法从mymethod
中获取数组的大小,因此如果您需要,请将其添加为另一个参数。