gpt4 book ai didi

c - C 中的 sprintf 和 unsigned int 数组

转载 作者:太空狗 更新时间:2023-10-29 17:08:53 26 4
gpt4 key购买 nike

我有一个指向整数数组的指针和数组的长度:

unsigned int length = 3;
int *array; // Assume the array has 3 initialized elements

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

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

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

既然数组的长度可以是任何长度,有什么方法可以让我sprintf (buffer, pattern, &array[0], &array[1], &array[2])显式枚举数组的元素?类似于 sprintf (buffer, pattern, array) 的内容。我可以根据需要编写尽可能多的辅助函数。我正在考虑伪造一个 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 中的 sprintf 和 unsigned int 数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13851663/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com