gpt4 book ai didi

c++ - 使用 sprint() 时缓冲区的适当大小是多少?

转载 作者:太空宇宙 更新时间:2023-11-04 06:23:47 28 4
gpt4 key购买 nike

当我想使用 sprintf 函数时,char 数组(缓冲区)的适当大小是多少?

如果缓冲区只能容纳 1 个字符,我不知道为什么这部分代码可以工作?我在里面放了比 1 个多得多的字符。

/* sprintf example */
#include <stdio.h>

int main ()
{
char buffer[1];
int n, a=5, b=3;
n = sprintf (buffer, "%d plus %d is %d", a, b, a+b);
printf ("[%s] is a string %d chars long\n", buffer, n);
return 0;
}

结果:

[5 plus 3 is 8] is a string 13 chars long

最佳答案

What is proper size of an char array (buffer) when i want to use sprintf function?

没有。

如果您可以根据格式字符串和输入类型计算出上限,那么您可以使用它。例如,一个 32 位的 int 不会占用超过 11 个字符来用可选符号表示十进制,因此您的特定示例不需要超过 44 个字符(除非我算错了) .

否则,使用更安全的东西:C++ 中的 std::stringstream,或 C 中的 snprintf 和 care。

I don't know why this part of code is working if buffer can hold only 1 char?

事实并非如此。它正在将缓冲区末尾写入其他内存。

也许这不会导致任何可见的错误;也许它会破坏其他一些变量;可能会导致保护错误并结束程序;也许它会破坏堆栈帧并在函数尝试返回时造成各种破坏;或者它可能会导致一些其他类型的未定义行为。但它的行为肯定不正确。

关于c++ - 使用 sprint() 时缓冲区的适当大小是多少?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29719113/

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