BCB sscanf参数个数不一致报CodeGuard错误


客户端版本信息对象的成员函数:
stVersionInfo& operator=(const char *ver) {
    sscanf(ver,"%d.%d.%d",&major_,&minor_,&reversion_);
    return *this;
}
用于从版本字符串解析生成版本对象信息。

如:
char version[] = "2.4.3";
stVersionInfo vi = version;

在BCB中,如果version形如"2.4",则sscanf报CodeGuard错误.

通过修改BCB关于CodeGuard的配置可以屏蔽此错误,参见:
http://topic.csdn.net/u/20110302/09/3dc07290-bae0-4b74-9d4d-480eb75284e8.html

如不修改配置,可改变实现(如下):
stVersionInfo& operator=(const char *ver) {
      int *pv[] = {&major_,&minor_,&reversion_};
      unsigned char *p = ver;
      unsigned short index = 0;
      char data[16]; ///< @note 未考虑data溢出情况
      unsigned short data_len = 0;
      char ch = '\0';
      do {
          ch = *p;
          if (ch=='.'||ch=='\0') {
              data[data_len] = '\0';
              (*pv[index++]) = atoi(data);
              data_len = 0;
          }
          else {
              data[data_len] = ch;
              data_len++;
          }
          p++;
      } while(ch!='\0'&&index<sizeof(pv)/sizeof(pv[0]));
    return *this;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值