C中的sprintf和unsigned int数组

前端之家收集整理的这篇文章主要介绍了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&C++相关文章