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/

10-11 04:19
查看更多