gpt4 book ai didi

c - snprintf() ,溢出的可能性?

转载 作者:太空宇宙 更新时间:2023-11-04 01:18:58 27 4
gpt4 key购买 nike

我有固定大小的数组 - 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] - 参见 comment ,只是构成字符串的第一部分 - 希望并不过分。

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


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

The snprintf function returns the number of characters that would have been written had n been sufficiently large, not counting the terminating null character, or a negative value if an encoding error occurred. C11dr §7.21.6.3 3

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

关于c - snprintf() ,溢出的可能性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49143467/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com