Linux 将端口号转换为字符串

Linux 将端口号转换为字符串,linux,network-programming,Linux,Network Programming,我正在尝试将整数形式的端口号转换为字符串,以传递给getaddrinfo()调用。我的代码如下所示: #define PORT_SIZE 5 void convert(int port) { char service[PORT_SIZE+1]; .... .... memset(service, '\0', PORT_SIZE+1); snprintf(service, PORT_SIZE+1, "%d", port); ... ... } 由于linux机箱上的最大端

我正在尝试将整数形式的端口号转换为字符串,以传递给getaddrinfo()调用。我的代码如下所示:

#define PORT_SIZE 5

void convert(int port) {
   char service[PORT_SIZE+1];
....
....
    memset(service, '\0', PORT_SIZE+1);
    snprintf(service, PORT_SIZE+1, "%d", port);
...
...
}
由于linux机箱上的最大端口大小是65535,因此将数组大小设置为5个字节以存储端口号是否正确


谢谢

没问题,如果结果字符串长度超过
端口大小
个字符,则会丢弃剩余字符,而不会存储,只计算函数返回的值,因此不会发生缓冲区溢出。写入内容后会自动追加一个终止的空字符,因此
memset()
是多余的。

或者只需调用itoa(端口、缓冲区、10)

我不会依赖这种限制。也许你的节目能活10年?20? 在amd128上运行?IPV8?int有多少位?那么将有多少个端口?

为什么不调用
itoa()
?我将“服务”的大小声明为NI_MAXSERV-一个系统定义的宏。这可能是正确的方法。是的,你可以做到。正如
getnameinfo()
手册所述,
NI_MAXSERV
是基于当前分配号码RFC中列出的服务的猜测,以帮助程序员为提供的缓冲区选择合理的大小。