我正在尝试将整数形式的端口号转换为字符串,以传递给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个字节来存储端口号是否正确?
谢谢!
答案 0 :(得分:1)
没关系,如果结果字符串长于PORT_SIZE
个字符,剩余的字符将被丢弃而不存储,只计算函数返回的值,因此不会发生缓冲区溢出。并且在写入内容后会自动附加终止空字符,因此memset()
是多余的
或者只是致电itoa (port, buffer, 10)
。
答案 1 :(得分:0)
我不会依赖那种限制。也许你的前卫生活10年? 20?在amd128上运行? IPV8? int有多少位?那么有多少个端口?