C中的sprintf和unsigned int数组

我有一个指向int数组的指针和数组的长度:
unsigned int length = 3;
int *array;        // Assume the array has 3 initialized elements

我还有一个字符串和一个缓冲区(假设它足够大)放入sprintf中:

char buffer[128];
const char *pattern = "(%d,%d,%d)\n";

假设模式中只有“%d”和其他字符,但可以是任何形式(即“Test%d:%d”或“%d%d”),并且数组的长度将始终为与“%d”的数量相同.

由于数组的长度可以是任何东西,有没有办法我可以做sprintf(缓冲区,模式,&数组[0],和数组[1],和数组[2])而不显式枚举元素数组?沿着sprintf(缓冲区,数组)行的东西.我可以根据需要编写尽可能多的辅助函数.我正在考虑伪造一个va_list,但这似乎是不好的做法,因为它将程序限制为某个编译器.

解决方法

在单个va_list中传递所有元素不会有帮助,因为格式字符串无论如何都需要在循环中创建.既然你无论如何都无法逃避循环,你也可以在同一个循环中进行打印:
int data[] = {12,345,6789,101112};
char buf[128],*pos = buf;
for (int i = 0 ; i != 4 ; i++) {
    if (i) {
        pos += sprintf(pos,",");
    }
    pos += sprintf(pos,"%d",data[i]);
}
printf("%s\n",buf);

这是一个link to a demo on ideone.

相关文章

本程序的编译和运行环境如下(如果有运行方面的问题欢迎在评...
水了一学期的院选修,万万没想到期末考试还有比较硬核的编程...
补充一下,先前文章末尾给出的下载链接的完整代码含有部分C&...
思路如标题所说采用模N取余法,难点是这个除法过程如何实现。...
本篇博客有更新!!!更新后效果图如下: 文章末尾的完整代码...
刚开始学习模块化程序设计时,估计大家都被形参和实参搞迷糊...