我开始了一些套接字编程,我遇到了函数inet_ntoa。该函数具有原型char * inet_ntoa(struct in_addr in);
。
那么这个字符串将如何/在哪里分配?我希望免费通话吗?
答案 0 :(得分:3)
来自inet_ntoa(3)
:
inet_ntoa()函数转换 给定的Internet主机地址 网络字节顺序为一个字符串 标准数字和点符号。 该字符串在静态分配的缓冲区中返回,后续 电话会覆盖
所以,没有。
答案 1 :(得分:2)
不,你没有释放它。它通常是函数中的静态存储,或者如果您在线程环境中运行,则是特定于线程的数据。
来自the definitive POSIX man page:
inet_ntoa()
的返回值可能指向可能被后续inet_ntoa()
调用覆盖的静态数据。
该页面还指出:
inet_ntoa()函数不需要是可重入的。不需要可重入的函数不需要是线程安全的。
这意味着,即使在线程环境中,它也可能不是线程安全的。
换句话说,它可以实现如下:
char *inet_ntoa (struct in_addr xyz) {
static char buff[50];
// Do something with xyz to populate buff.
return buff;
}
答案 2 :(得分:1)
你不需要释放它,因为它是静态的。
但是你必须在再次调用函数之前获取字符串内容的副本,否则你将覆盖第一次调用的内容。