我正在修复一个调用gethostname()
,旧代码将hostName
数组声明为 10 个字符,导致边界错误,因为主机名比那个大。我的解决方法是声明hostName
使用MAXHOSTNAMELEN
(我的平台parm.h
声明为 64)。另一位程序员现在说需要将数组声明为hostName[MAXHOSTNAMELEN+1]
并清除,因为(来自他的电子邮件):
这来自手册页:POSIX.1-2001 保证“主机名(不包括终止的空字节)限于 HOST_NAME_MAX 字节”</p>
因此,要处理所有情况,您必须将缓冲区大小加一并使用空字符初始化缓冲区。
现在我在网上看到的每个示例都在执行 a char hostName[MAXHOSTNAMELEN]
,并且由于调用要么有效要么无效,因此将数组归零或将其初始化为 null 对我来说毫无意义,hostName
因为如果它有效,则数组被设置为主机名称,如果不是,则调用返回错误。
将参数声明或初始化为的可靠方法是什么gethostname()
?