Стандартный регистр
Возвращаемое значение из GetPrivateProfileString
- это количество символов, скопированных в буфер, не включая нулевой терминатор.
Следовательно, вы можете начать с (скажем) aбуфер 100 _TCHAR
с и проверьте возвращаемое значение.Если это 99, то либо вы точно угадали размер строки, либо (что более вероятно) ваш буфер слишком мал, поэтому увеличьте его и повторите попытку.
«Перечисление» case
Вышеприменяется к стандартному случаю получения одного строкового значения из файла .ini
.Если вместо этого вы передаете NULL
в качестве параметров lpAppName
или lpKeyName
, чтобы перечислить все доступные значения, и вы указали слишком малый размер буфера, возвращаемое значение будет two меньше размера буфера.
Стратегия размещения
Вам нужно будет динамически распределять буфер.Таким образом, вы, вероятно, будете использовать std::auto_ptr
или std::unique_ptr
, или, возможно, std::vector<_TCHAR>
, который вы можете resize()
по мере необходимости.Если вы не знаете заранее, насколько большими будут строки, я бы порекомендовал начать с чего-то вроде 250 _TCHAR
с и удваивать размер каждый раз, когда вы обнаружите, что буфер слишком мал.На практике, я бы поспорил, что 250 достаточно в 99,9999% случаев.
Альтернативы
XML-файл, хранящийся в %APPDATA%
;Файл JSON хранится в %APPDATA%
, Реестр…