让我说我有这个简单的代码:
#include <stdio.h>
#define BUFFER_LEN 10
int main()
{
char buffer[BUFFER_LEN];
sprintf(buffer, "Oh noes, it's too long! What can I do?");
return 0;
}
显然,由于缓冲区太小而无法包含字符串,因此无法正常工作。我知道可以使用不同的函数,缓冲区的内存处理也不同。 但是我的问题是:是否有可能以某种方式检查缓冲区是否溢出,如果是这样,打开文本文件并写入,而不是将其放在缓冲区内。
答案 0 :(得分:5)
不确定。首先使用snprintf()
检查输出长度:
int len = snprintf(NULL, 0, "Oh noes, it's too long! What can I do?");
然后你有len
,你可以进行必要的评估和比较。
来自CppReference:
返回值
snprintf()
:如果忽略bufsz则将写入缓冲区的字符数(不包括终止空字符),如果发生编码错误(对于字符串和字符转换说明符),则为负值< / p>
因此它会将有限数量的字符写入缓冲区(由第二个参数指定),并返回已写入的完整数据的长度,这使它成为一个很好的函数用于字符串长度评估。