C - snprintf() , 溢出的可能性



我有固定大小的数组 - arr1 和 arr2。

char arr1[100];
char arr2[100];
snprintf(arr2, sizeof(arr2), "%sAND", "CONTENTOFARRAY2");
snprintf(arr1, sizeof(arr1), "%sAND", arr2);

第二个snprintf会导致缓冲区溢出吗?我已经尝试了一些测试,到目前为止没有发现任何问题。

有没有人注意到任何此类问题?

在第二次调用中,"%s" 没有指示snprintf()使用所有arr2[100] - 请参阅注释,只是构成字符串的第一部分 - 希望这并不过分。

如果arr2[]填充更长的字符串(例如 98 个字符(,arr1[]将收到串联的截断版本。仍然没有缓冲区溢出。


由于snprintf()设计为防止溢出,因此不需要检查溢出。 相反,谨慎使用 snprintf() 会检查结果是否截断

snprintf 函数返回如果足够大n将写入的字符数,不计算终止 null 字符,如果发生编码错误,则返回负值。C11dr §7.21.6.3 3

int count = snprintf(arr1, sizeof arr1, "%sAND", arr2);
if (count < 0 || count >= sizeof arr1) Handle_Error();

最新更新