2013-08-09 5 views
0
void Clients::SetFog(char* fog) 
{ 
    char Buffer[45]; 
    sprintf(Buffer, "d %s", fog); 
    CMD(ID, SV_CMD_RELIABLE, Buffer); 
    RtlZeroMemory(Buffer, sizeof(char)); 
} 

Мой вопрос: Я не знаю, как обрабатываются буферы, символы скважины и переменные типа int при определении внутри функции. Поскольку вы замечаете, что я Zero это из памяти, я делаю это почти со всеми моими функциями, которые имеют определенные типы, чтобы сохранить чистоту памяти, тип приложения, которое я создаю, и платформу, для которой я не могу отлаживать эту глубину/заглянуть в память.Должен ли я это сделать?

+1

Зачем использовать вызов функции для установки одного байта на ноль? – Mat

ответ

0

Прежде всего, вы не обнуление буферной памяти полностью

RtlZeroMemory(Buffer, sizeof(char)); 

обнуляет только первый байт, потому что SizeOf (Char) является 1

Во-вторых, ваш код не является безопасным, потому что STRLEN (туман) может превышать длина вашего буфера (который равен 45)

И третий вопрос не ясен. Что вы подразумеваете под вопросом: «Я не знаю, как обрабатываются буферы, столбцы и переменные типа int при определении внутри функции». Общий ответ заключается в том, что они обрабатываются таким же образом, как если бы они были определены НЕ внутри функции. Может быть, вы можете уточнить свой вопрос?

+0

У них не будет переполнения буфера для тумана, что заставило вас предположить, что он достигнет большей длины? это не от ввода клиента. –

+0

Кстати, размер байта char равен 4. –

+3

В C/C++ sizeof (char) по определению 1, стандарт говорит так. – AngelCastillo

Смежные вопросы