libc 中的函数返回的字符串在哪里分配?
我开始了一些套接字编程,并且遇到了函数 inet_ntoa 。该函数的原型为 char * inet_ntoa(struct in_addr in);
。
那么这个字符串将如何/在哪里分配呢?我应该免费打电话吗?
I started some socket programming, and I ran across the function inet_ntoa . The function has the prototype char * inet_ntoa(struct in_addr in);
.
So how/where will this string be allocated? Am I expected to call free on it?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
来自
inet_ntoa(3)
:所以,不。
From
inet_ntoa(3)
:So, no.
不,你不释放它。它通常是函数内的静态存储,或者是线程特定的数据(如果您在线程环境中运行)。
来自权威的 POSIX 手册页:
该页面还指出:
这意味着,即使在线程环境中,它也可能根本不是线程安全的。
换句话说,它可以实现如下:
No, you don't free it. It's usually static storage within the function, or thread-specific data if you're running in a threaded environment.
From the definitive POSIX man page:
That page also states:
That means that, even in a threaded environment, it may not be thread-safe at all.
In other words, it can be implemented something like:
您不需要释放它,因为它是静态的。
但是,在再次调用该函数之前,您必须获取字符串内容的副本,否则您将覆盖第一次调用的内容。
You don't need to free it since it is static.
But you have to take a copy of the string contents before you call the function again, otherwise you'll overwrite the contents from the first call.