Я занимаюсь статическим анализом некоторого старого кода C++, и мой C++ не самый сильный. У меня есть этот кусок кода:
void NIDP_clDPLogger::log(TCHAR *logString)
{
TCHAR temp_logString[1024] = {0};
_tcsncpy(temp_logString,logString,1024);
temp_logString[1023] = NULL;
...
Инструмент статического анализа жалуется на то, что индексирует logString (параметр, передаваемый в функцию) в 1024, когда он может быть короче (размер варьируется, 1024 — это максимальный размер, я думаю). Поэтому я думаю, что мое исправление состоит в том, чтобы проверить размер logString и использовать его, например:
void NIDP_clDPLogger::log(TCHAR *logString)
{
size_t tempSize = sizeof(logString);
TCHAR temp_logString[tempSize] = {0};
_tcsncpy(temp_logString,logString,tempSize);
temp_logString[tempSize-1] = NULL;
Мне просто интересно, нормально ли это будет работать? Кто-нибудь может увидеть какие-либо недостатки/проблемы? Сборка и тестирование этого проекта немного сложны, поэтому я в основном просто ищу проверку работоспособности, прежде чем пройти через все это. Или есть лучший способ для меня сделать это? Могу ли я передать значение size_t в _tcsncpy, потому что раньше там было жестко заданное целое число?
Спасибо за помощь.