Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/70.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C %s和%1024s之间的差异_C_String Formatting - Fatal编程技术网

C %s和%1024s之间的差异

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的链接。它已经发

我了解到使用“%1024s”而不是“%s”可以防止在代码中创建安全漏洞。 “%1024s”与“%s”有何不同?

scanf()
中,大概是吧


基本上,
%1024s
将要扫描的字符串的长度最大化为1024个字符,因此它将始终适合1025字节长的缓冲区(0终止符为1024+1)<代码>%s没有此限制,因此如果缓冲区小于要放入的字符串
scanf()
,则会发生缓冲区溢出,程序将调用未定义的行为。

有助于防止此问题
%
s
之间存在隐藏的安全漏洞。您需要正好四个字节才能插入。更新了指向2013版POSIX的链接。它已经发布了,但他们的网站组织得太差,很难找到。@larsmans谢谢。我链接的只是第一个谷歌点击(我倾向于阅读这些内容)。请注意,使用
“%1024s”
需要一个可以容纳1025个字符的数组。终止的
'\0'
不在1024之内,但仍然写入aray中。@pmg-Right,我已经更新了它(我正确地写入了“字符串长度”,但未能在中计算NUL终止符…)