我正在修复一个调用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()?