2

VisualStudio2010を使用して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)を監視しましたが、メインではblaは型ですが、mymethodではblaは型でwchar_tあり、があります。sizeof(bla) = 2048unsigned short*sizeof(bla) = 4

なぜそうなのですか?

編集された配列を返す代わりに、メソッドが配列を変更できるように、blaをメソッドに渡したいと思いました。ただし、sizeof(bla)を4ではなく1024にしたいので、swprintfは機能しません。

乾杯。

4

2 に答える 2

1

主に、配列のサイズを計算しています。

sizeof(bla); // 1024 * sizeof(unsigned short) = 2048 

関数でsizeofを使用する場合は、ポインターのバイト単位のサイズを計算します。

sizeof(bla); //means sizeof (wchar_t *) = 4
于 2011-09-20T16:15:39.943 に答える
0

引数関数がwchar_tVS2010の型であるのは奇妙だと思います。これwchar_tは、のtypedefであったため、長い間使用されていましたunsigned short。1つは配列で、もう1つはポインターであるため、サイズの違いは明らかです。これがC++の場合、配列への参照を取得できます。配列のサイズを内部から取得することはできないmymethodため、必要に応じて、別のパラメーターとして追加します。

于 2011-09-20T16:14:07.543 に答える