我有一个关于以下代码的问题:

void testing(int idNumber)
{
    char name[20];

    snprintf(name, sizeof(name), "number_%d", idNumber);
}

char数组name的大小是20,所以如果idNumber111它可以工作,但是实际的idNumber是111111111111111111111111111111如何确定char数组应该有多大才能保持snprintf的结果?

最佳答案

只有一个好答案:
询问snprintf本身(传递长度为0)。
它返回缓冲区足够大时它应该写入的输出大小,不包括终止的0。
man-page for snprintf
标准报价(C99+修正案):
7.21.6.5 snprintf函数
简介

#include <stdio.h>
int snprintf(char * restrict s, size_t n,
const char * restrict format, ...);

说明
2除了输出被写入
数组(由参数snprintf指定)而不是流。如果fprintf为零,则不写入任何内容,
s可能是空指针否则,nst以外的输出字符是
丢弃而不是写入数组,并在末尾写入空字符
实际写入数组的字符数。如果在对象之间进行复制
这种重叠,行为是未定义的。
退货
函数返回本应写入的字符数
如果s足够大,不包括终止的空字符或负数
值(如果发生编码错误)。因此,以空结尾的输出
当且仅当返回值为非负且小于n-1时完全写入。

关于c - 如何确定char数组真正需要的大小?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/26509681/

10-10 21:24
查看更多