加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

C中的sprintf和unsigned int数组

发布时间:2020-12-16 04:53:16 所属栏目:百科 来源:网络整理
导读:我有一个指向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"; 假
我有一个指向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("%sn",buf);

这是一个link to a demo on ideone.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读