假设我有一个定义整数的 #define
指令:
#define ZEROPADDING 20
有没有一种方法可以通过 sprintf()
使用该常量来对字符串进行零填充?
目前我这样做,其中包含一个“魔数(Magic Number)”:
size_t my_string_length = 0;
/* append some stuff to my string... */
/* append string length to my string, for example */
my_string_length += sprintf(my_string + my_string_length, "%020zu", strlen(my_string));
我想用类似的东西替换它:
my_string_length += sprintf(my_string + my_string_length, "%0ZEROPADDINGzu", strlen(my_string));
或者:
my_string_length += sprintf(my_string + my_string_length, "%0"ZEROPADDING"zu", strlen(my_string));
但是编译器说我不能这样做。
我想避免使用“魔数(Magic Number)”。 C 中是否有以这种方式使用 #define
指令的习惯用法,或者我是否需要编写一个自定义函数来使用仅在运行时已知的填充宽度进行零填充?
最佳答案
试试这个:
my_string_length += sprintf(my_string + my_string_length, "%0*zu",
(int)ZEROPADDING, strlen(my_string));
我对 int
进行了强制转换,因为 *
宽度/精度特殊项始终需要 int
,如果参数发生,可能会发生不好的事情具有不同的整数类型。在您的情况 (20) 中,您不需要它,但它不会造成伤害。
顺便说一句,你不应该使用sprintf
;请改用 snprintf
。
关于c - 使用 sprintf 和 #define 常量在 C 中填充字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30281973/