我正在努力理解 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/