Массив wchar_t передан в функцию
Я делаю программу C на окнах с использованием 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, бла имеет тип unsigned short*
и имеет sizeof(bla) = 4
,
Почему это так?
Я хотел передать bla в метод, чтобы метод мог изменять массив, а не возвращать отредактированный массив. Однако swprintf не работает, так как я хочу, чтобы sizeof(bla) был 1024 вместо 4.
Приветствия.
2 ответа
В основном вы рассчитываете размер массива:
sizeof(bla); // 1024 * sizeof(unsigned short) = 2048
в вашей функции, если вы используете sizeof, вы вычисляете размер в байтах указателя:
sizeof(bla); //means sizeof (wchar_t *) = 4
Я нахожу странным, что функция аргумента имеет тип wchar_t
в VS2010, это было давно wchar_t
был просто typedef для unsigned short
, Разница в размере очевидна, поскольку один является массивом, а другой - указателем. Если бы это был C++, вы могли бы взять ссылку на массив. Вы не сможете получить размер массива изнутри mymethod
поэтому, если вам это нужно, добавьте его в качестве другого параметра.