GetPrivateProfileStringA()截断了我的配置值编号
GetPrivateProfileStringA() cutting off my config value number
我正在调用GetPrivateProfileStringA()方法,以便从config.ini文件中读取值,但当我的一个值超过3位数时,它会将值减少到3(1234将变为123)。
我有一个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位数字,所以我不认为它与将值转换为long有任何关系。
这是我的configParam结构:
typedef struct _CONFIG_PARAMS
{
long minImageWidth;
long minImageHeight;
long minEyeDist;
long maxEyeDist;
} STRUCT_CONFIG_PARAMS;
我有点不明白为什么会发生这种事。感谢您的帮助!
您正在为iniVal使用sizeof(),它将返回指向char的指针的大小,而不是动态分配的数组的大小。由于在您的平台上这是4,因此会导致截断为3个字符和一个"\0"。
使用在堆栈上分配iniVal
char iniVal[256];
或者使用常量来分配数组,然后将其传递给GetPrivateProfileStringA(),如中所示
const size_t ArraySize = 256;
char *iniVal = new char[ArraySize];
...
GetPrivateProfileStringA("PASSPORT", "MinWidth", "200", iniVal, ArraySize , iniFilename);
相关文章:
- 我的神经网络不起作用 [XOR 问题]
- C++我的数学有什么问题,为什么我的代码不能正确循环
- 我的字符计数代码计算错误.为什么
- 为什么我的C#代码在调用回C++COM直到Task时会暂停.等待/线程.加入
- cmake在我的项目中所需的所有静态库都不成功
- 为什么我的代码在输出中增加了93天
- 我的简单if-else语句是如何无法访问的代码
- 为什么我的for循环不能正确获取argv
- 我的项目不会像"undefined reference to `grpc::g_core_codegen_interface'"那样使用未定义的引用错误进行编译
- 我的程序有一个保存配置文件的GUI,如何双击此配置文件以直接加载带有配置数据的GUI?
- 如何将我的 CMake 项目配置为运行所有单元测试?
- 为什么我的 C++ 程序在执行 TCMALLOC 堆检查器或堆配置文件时使用大量内存
- VPN管理代理总是返回零配置文件,而且我似乎无法创建新的配置文件
- 我如何配置我的cmake文件以与Google Test和CTEST一起使用
- 我可以将OpenCV的Release配置与我的应用程序的Debug配置一起使用吗
- 如何使用 QSettings向我的配置文件添加注释
- 我应该如何配置我的 zlib DEFLATE 以符合 Websocket permesasge-deflate 标准
- C++ exit(0) 在配置从调试更改为发布后不再立即退出我的程序
- GetPrivateProfileStringA()截断了我的配置值编号
- 我如何配置cmake编译一个文件两次与两个不同的编译器