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);
关于c - 像在printf中那样连接一个字符串,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/33736930/