#define SIZE 9
int number=5;
char letters[SIZE]; /* this wont be null-terminated */
... 

char fmt_string[20];
sprintf(fmt_string, "%%d %%%ds", SIZE);
/* fmt_string = "%d %9d"... or it should be */

printf(fmt_string, number, letters);

有没有更好的方法来做这件事?

推荐答案

不需要构造特殊格式的字符串.如果在格式标记中使用.*作为精度,则printf允许使用参数(位于值之前)指定精度.

例如:

printf ("%d %.*s", number, SIZE, letters);

注:宽度(最小字段宽度)和精度(最大打印字符数)之间有区别.

另请参阅printf手册页(Linux下为man 3 printf),特别是关于字段宽度和精度的部分:

可以写成"*"或"*m$"来代替十进制数字字符串(对于某些 十进制整数m)指定精度在下一个 参数,或必须为int类型的第m个参数中.

C++相关问答推荐

是否可以在C中进行D3 D12申请?

需要大整数和浮点数.使用long long int和long double

如何设置指针指向在函数中初始化的复合文字中的整数?

GLIBC:如何告诉可执行文件链接到特定版本的GLIBC

X86/x64上的SIGSEGV,由于原始内存访问和C中的DS寄存器之间的冲突,在Linux上用TCC编译为JIT引擎

SSH会话出现意外状态

CGO:如何防止在使用CGO在包中包含C头文件时出现多个定义...&q;错误?

如何使用C++在控制台中以彩色打印被阻止的客户端

我的C函数起作用了,但我不确定为什么

理解bzip2的BZ2_解压缩函数中的状态重新分配

为什么我的半数组测试和奇数组测试不起作用?(我使用Assert进行调试)

计算SIZE_MAX元素的长数组的大小

分配给静态变量和动态变量的位置之间有区别吗?

计算时出现奇怪的计算错误;N Select K;在C中

gdb - 你能找到持有内部 glibc 锁的线程吗?

当 n 是我们从用户那里获得的整数时,创建 n 个 struct 参数

添加/删除链表中的第一个元素

free后内存泄漏?

如何在 C 中编辑 struct 体中的多个变量

计算 e^x 很好.但不是 x 的罪