Я вызываю метод GetPrivateProfileStringA(), чтобы читать значения из файла config.ini, но когда одно из моих значений превышает 3 цифры, оно сокращает значение до 3 (1234 станет 123).GetPrivateProfileStringA() отключить мое значение значения конфигурации
У меня есть файл config.ini, который выглядит следующим образом:
[PASSPORT]
MinWidth=200
MinHeight=300
[FEATURES]
MinEyeDistance=20
MaxEyeDistance=1000
...
Я читаю этот файл config.ini, используя следующий код:
char iniFilename[] = "C:\\config.ini";
char *iniVal = new char[256];
//check config.ini exists
if (std::ifstream(iniFilename))
{
GetPrivateProfileStringA("PASSPORT", "MinWidth", "200", iniVal, sizeof(iniVal), iniFilename);
configParam->minImageWidth = atol(iniVal);
GetPrivateProfileStringA("PASSPORT", "MinHeight", "300", iniVal, sizeof(iniVal), iniFilename);
configParam->minImageHeight = atol(iniVal);
GetPrivateProfileStringA("FEATURES", "MinEyeDistance", "10", iniVal, sizeof(iniVal), iniFilename);
configParam->minEyeDist = atol(iniVal);
GetPrivateProfileStringA("FEATURES", "MaxEyeDistance", "1000", iniVal, sizeof(iniVal), iniFilename);
configParam->maxEyeDist = atol(iniVal);
}
Самих буфера строки (iniVal) получает только 3 цифры, поэтому я не считаю, что это имеет какое-либо отношение к преобразованию значения в длинное.
Это мой configParam структура:
typedef struct _CONFIG_PARAMS
{
long minImageWidth;
long minImageHeight;
long minEyeDist;
long maxEyeDist;
} STRUCT_CONFIG_PARAMS;
Я бы потерял, почему это происходит. Любая помощь приветствуется!
Это очень плохой способ читать ini файлов. Этот API давно устарел. Пожалуйста, прекратите использовать его. Используйте чистый синтаксический анализатор файлов C++ ini. Здесь очень много. Веб-поиск откроет их. Кроме того, 'atol' - ужасный выбор для преобразования целых чисел. Вы уверены, что кодируете на C++? Похоже, что вы до сих пор кодирования в предварительной стандартизации C. –
Привет @DavidHeffernan, спасибо за ваш ответ! Я найду ini-парсер и замените этот код. – LKB
@DavidHeffernan - в отношении вашего комментария об atol, являющемся ужасным выбором для преобразования строк в int, что было бы лучшим способом сделать это? Почему это плохо? Извините, просто любопытно. – LKB