printf
是个漂亮的函数,因为它可以帮助您以非常干净的方式格式化字符串。
printf("Player %s has lost %d hitpoints", victim.name, damage);
是否有类似的方式在“正常字符串”中连接和执行强制,如下所示:
uint8_t myString = ("Player %s has lost %d hitpoints", victim.name, damage); //SOMETHING LIKE THIS
C99的snprintf
打印为字符串,并保证不会溢出缓冲区:
char msg[48];
snprintf(msg, sizeof(msg),
"Player %s has lost %d hitpoints", victim.name, damage);
snprintf
返回如果字符串足够大则将要写入的字符数。因此,如果返回的值等于或大于缓冲区大小,则字符串将被截断。
传递缓冲区大小为零和空指针是合法的,这样您就可以通过先进行探测调用来进行自己的分配:
char *msg;
int n;
n = snprintf(NULL, 0,
"Player %s has lost %d hitpoints", victim.name, damage);
msg = malloc(n + 1);
n = snprintf(msg, n + 1,
"Player %s has lost %d hitpoints", victim.name, damage);
// do stuff with msg
free(msg);
在GNU编译器上,非标准函数asprintf
将为您完成此任务:
char *msg = asprintf("Player %s has lost %d hitpoints",
victim.name, damage);
// do stuff with msg
free(msg);
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句