GetPrivateProfileString使用时的限制事项:GetPrivateProfileString 无法读取最后的空格

在vs2017中开发mfc项目,使用WritePrivateProfileString和GetPrivateProfileString读写INI配置文件。发现,我用WritePrivateProfileString函数写入的值比如“z ”,再用GetPrivateProfileString函数读出来,就只剩下“z”,后面的空格不见了。

enter键 发泄超大号解压回车键usb电脑办公键盘程序员解压神器抖音网红Big Enter午睡枕头解压发送键创意礼物
解压神器 网红同款 一键多用 午睡枕头 | 月销量897件
优惠价19.8元
原价¥19.8

淘口令:

¥wBhTXultpSw¥
 

后来发现了GetPrivateProfileString函数使用的一些限制(坑):

1.可指定数据取得缓冲区的最大长度nSize为0xFFFF, 即可最大取得的数据长度为nSize-1(65534)。另外,使用WritePrivateProfileString写入则没有此限制。

2.读取INI数据时,遇到换行字符(0x0D, 0x0A)与NULL(0x00)即刻停止,忽略之后的字符。

3.读取INI时,会先从头找Section,找到后即在此Section中查找Key,要是在这个Section找不到此Key的话,即认为此Key不存在,即便此后还有同名的Section-Key定义。比如下面这个具体的例子里,使用GetPrivateProfileString则永远无法成功读取到Section1Key2。

  [Section1]
   Section1Key1=・・・
  [Section2]
   Section2Key1=・・・
  [Section1]
   Section1Key2=・・・    //× 永远无法找到它

4.此API函数有一个默认值参数lpDefault,用于指定没有找到指定的字段名或键名时默认的返回字符。由于INI文件被独占读取打开等原因导致的INI无法读取时也返回此默认参数,所以无法得知此API调用本身是否发生了错误,即无法辨别是无法读取INI还是指定的字段名或键名在INI中不存在 。

5.写入INI的字符串要是有空格(0x20)开头或是结尾,虽然可以正确写入不过读取时开头与结尾的空格会被自动忽略。要是真的有必要保存这些空格的话,有一个解决办法:写入前在字符串的前后加上‘。而且读取时会自动忽略开头与结尾的’,无需多余处理。

© 版权声明
THE END
喜欢就支持一下吧,技术咨询可以联系QQ407933975
点赞1
分享
评论 抢沙发
CPPKU的头像-cppku-C++库

昵称

取消
昵称表情代码图片