我被困在修复一些遗留的 RAID 代码(是的,我拉了最短的一根稻草)。
这是我找到的一段代码。
#define FLAG_LENGTH 256
#code
char str[FLAG_LENGTH-1]
strlcat(&str,source_ptr,FLAG_LENGTH);
str 声明上方有一条评论说大小减少 1 是有充分理由的,但慷慨的评论作者没有提到“充分的理由”。
如果我正确理解 strlcat 的实现,无论如何它都会终止所有字符串,并且如果 256 会将其添加到大小为 255 的字符串(即最后一个索引 254)的第 256 个字符(即索引 255)中,则它会终止所有字符串。我们是否溢出了细绳??或者这样做是否有一些隐藏的天才(纯粹根据评论询问)