Страницы

Поиск по вопросам

пятница, 14 июня 2019 г.

Как правильно передать массив в _stprintf_s()?

Почему в функцию передаётся TCHAR(&name)[100], а не TCHAR *name?
void CreateName(TCHAR(&name)[100], int number) { _stprintf_s(name, TEXT("Your number: %d"), number); }


Ответ

В документации Майкрософт функция _stprintf_s является макроопределением следующего вида
#define _stprintf_s swprintf_s
В свою очередь функция swprintf_s определяется как
template int swprintf_s( wchar_t (&buffer)[size], const wchar_t *format, ... ); // C++ only
То есть это шаблонная функция шаблонным параметром которой является размер массива. Поэтому массив, используемый в качестве аргумента передается функции по ссылке, чтобы функция могла определить размер массива.
Соответственно и функция CreateName объявляется свой первый параметр как ссылку на массив, который она далее передает в функцию _stprintf_s. Если бы она не принимала массив по ссылке, то не смогла бы вызвать функцию _stprintf_s
Для вызова функции CreateName нужно просто указать имя массива в качестве аргумента, как это делает в свою очередь сама функция при вызове функции _stprintf_s

Комментариев нет:

Отправить комментарий