массив wchar_t передан в функцию - PullRequest
2 голосов
/ 20 сентября 2011

Я делаю программу на C для Windows, используя Visual Studio 2010.

Я передаю массив wchar_t функции.

//in main
wchar_t bla[1024] = L"COM6";

mymethod(bla);

static void mymethod(wchar_t *bla) {
    //do stuff
}

Я использовал отладчик для просмотра bla, sizeof (bla) и заметил, что в основном bla имеет тип wchar_t и sizeof(bla) = 2048, но в mymethod, bla имеет тип unsigned short* и имеет sizeof(bla) = 4.

Почему это так?

Я хотел передать bla в метод, чтобы метод мог изменить массив вместо возврата отредактированного массива. Однако swprintf не работает, так как я хочу, чтобы sizeof (bla) был 1024 вместо 4.

Приветствие.

Ответы [ 2 ]

1 голос
/ 20 сентября 2011

в основном вы вычисляете размер массива:

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

в вашей функции, если вы используете sizeof, вы вычисляете размер в байтах указателя:

sizeof(bla); //means sizeof (wchar_t *) = 4
0 голосов
/ 20 сентября 2011

Мне кажется странным, что функция аргумента имеет тип wchar_t в VS2010, это было давно, так как wchar_t был просто typedef для unsigned short.Разница в размере очевидна, поскольку один является массивом, а другой - указателем.Если бы это был C ++, вы могли бы взять ссылку на массив.Вы не сможете получить размер массива из mymethod, поэтому, если вам это нужно, добавьте его в качестве другого параметра.

...