C %s和%1024s之间的差异
我了解到使用“%1024s”而不是“%s”可以防止在代码中创建安全漏洞。 “%1024s”与“%s”有何不同?在C %s和%1024s之间的差异,c,string-formatting,C,String Formatting,我了解到使用“%1024s”而不是“%s”可以防止在代码中创建安全漏洞。 “%1024s”与“%s”有何不同?在scanf()中,大概是吧 基本上,%1024s将要扫描的字符串的长度最大化为1024个字符,因此它将始终适合1025字节长的缓冲区(0终止符为1024+1)%s没有此限制,因此如果缓冲区小于要放入的字符串scanf(),则会发生缓冲区溢出,程序将调用未定义的行为。有助于防止此问题%和s之间存在隐藏的安全漏洞。您需要正好四个字节才能插入。更新了指向2013版POSIX的链接。它已经发
scanf()
中,大概是吧
基本上,
%1024s
将要扫描的字符串的长度最大化为1024个字符,因此它将始终适合1025字节长的缓冲区(0终止符为1024+1)<代码>%s没有此限制,因此如果缓冲区小于要放入的字符串scanf()
,则会发生缓冲区溢出,程序将调用未定义的行为。有助于防止此问题%
和s
之间存在隐藏的安全漏洞。您需要正好四个字节才能插入。更新了指向2013版POSIX的链接。它已经发布了,但他们的网站组织得太差,很难找到。@larsmans谢谢。我链接的只是第一个谷歌点击(我倾向于阅读这些内容)。请注意,使用“%1024s”
需要一个可以容纳1025个字符的数组。终止的'\0'
不在1024之内,但仍然写入aray中。@pmg-Right,我已经更新了它(我正确地写入了“字符串长度”,但未能在中计算NUL终止符…)