c - 格式化字符串的大小

标签 c printf sizeof

我正在努力理解 snprintf 期间发生的事情。 假设我有两个数字:

int i =11; int k = 3;

我想像这样格式化它们 [%02d] %03d\t" 并使用 snprintf。 然后,我将生成的字符串与 write() 一起使用。

snprintf 需要长度/字节 n。 我不明白我需要提供的长度是多少... 我有两个理论:

a) 是

sizeof(int)*2

b) 我通过计算两个整数的位数并添加输出将包含的其他字符来检查格式化字符串将包含多少个字符:

2*sizeof(char) + 1*sizeof(char) + 2*sizeof(char) + 3*sizeof(char)+ 1*sizeof(char)

-> i 的数字 + k 的数字 + 添加到第一个 int 的零 + 添加到第二个 int 的零 + tab

我很难理解我必须给 snprintf 的“n”是什么

最佳答案

缓冲区大小

根据 documentation :

Maximum number of bytes to be used in the buffer. The generated string has a length of at most n-1, leaving space for the additional terminating null character. size_t is an unsigned integral type.

假设你写入这样一个数组:

char buf[32];

缓冲区可以容纳 32 个字符(包括空终止符)。因此我们这样调用该函数:

snprintf (buf, 32, "[%02d] %03d\t", i, k); 

您还可以检查返回值以查看已写入(或将写入)的字符数。在这种情况下,如果它大于 32,则意味着某些字符必须丢弃,因为它们不适合。

关于c - 格式化字符串的大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53447832/

相关文章:

c - 开发-C++ : 'prinft' undeclared

c - C 中位域结构的大小

c - 为什么此代码打印 "False",尽管 int 的大小大于 -1?

c - 在 C 中设置 select() 和 write_fds

c - 如何编译 POSIX 定时器

c - 分配结构数组时遇到问题

c - 在 C 中将字符串转换为 morze 时 Printf() 不起作用

c - 如何使用循环和内存集以两种方式初始化数组?

c - 在 C 中使用指针时未获取变量的指定值

c++ - Char 的大小与字符串不同