【问题标题】:can we pass unsigned char to inet_ntop()我们可以将 unsigned char 传递给 inet_ntop()
【发布时间】:2020-05-22 18:40:37
【问题描述】:
#include <arpa/inet.h>

char buf[INET6_ADDRSTRLEN] = {};
int af = AF_INET;
unsigned char addr[4] = {0x7f, 0x0, 0x0, 0x1};

printf("Address: %s\n", inet_ntop(af, addr, buf, sizeof buf));

unsigned char 数组传递给inet_ntop() 调用是否有效?上面的代码有效,但手册页说 API 需要在第二个参数中使用网络地址结构。

【问题讨论】:

  • 马克,有什么不使用struct in_addr addr的特殊原因吗?
  • @chux-ReinstateMonica,这是遗留代码,我不想做大的改动:)
  • 如果它的遗留代码和一个使用相同的遗留编译器、选项、操作系统,你没问题 - 否则我怀疑你是SOL

标签: c networking inet-ntop


【解决方案1】:

我看到one implementation uses unsigned longstruct in_addr addr 的一个成员。如果您在 unsigned long 不是 4 个字节的系统上编译 - 我可以预见到麻烦。如果系统对struct in_addr 的对齐要求比char [] 更严格,我可以再次预见到麻烦。

最后,您似乎正在寻找保证这个弱代码在未来可以正常运行的保证。祝你好运。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-01-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-10-07
    相关资源
    最近更新 更多