想把一个 repo 的代码从 C++转成 C (目标平台编译器对 CPP 支持不好),遇到了这个诡异的问题
库: https://github.com/radcli/radcli/
原型:
VALUE_PAIR *rc_avpair_add(rc_handle const *rh, VALUE_PAIR **list, uint32_t attrid, void const *pval, int len, uint32_t vendorspec);
C++代码片段:
// C++ code example where the issue does not occur
constexpr int kVendorSoftbank = 22197;
constexpr int kSbBBMac = 1;
// ... (other relevant code)
if (rc_avpair_add(rh.get(), &send_raw, kSbBBMac, mac.c_str(), mac.size(), kVendorSoftbank) == nullptr) {
// Error handling
}
C 代码片段:
// C code example where the issue occurs
const int kVendorSoftbank = 22197;
const int kSbBBMac = 1;
// ... (other relevant code)
if (rc_avpair_add(rh, &send_raw, kSbBBMac, mac, strlen(mac), kVendorSoftbank) == NULL) {
// Error handling
}
C 代码里 vendorspec 只有指定为 0(VENDOR_NONE)时才能正确执行,其他无论设置成什么值都返回失败 NULL ,C++代码就能正确执行。
C 代码: https://github.com/missing233/sofutobanku/blob/master/c/radius.c
C++代码: https://github.com/missing233/sofutobanku/blob/master/cpp/radius.cc
求 C 语言大手子解答(