Массив 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 поэтому, если вам это нужно, добавьте его в качестве другого параметра.

Другие вопросы по тегам