5

这是一个新手问题。要创建格式化的 C 字符串,我使用printf,例如:

int n = 10;
printf("My number is %i", 10);

但是,怎么样:

int n = 10
char *msg = "My number is %i", 10;
printf(msg);

如何将生成的格式化字符串存储在变量中?我想要“我的号码是 10”。

4

4 回答 4

18

你想使用snprintf()

int n = 10;
char bla[32];   // Use an array which is large enough 
snprintf(bla, sizeof(bla), "My number is %i", n);

不要使用;_ sprintf()它类似于snprintf但不执行任何缓冲区大小检查,因此它被认为是一个安全漏洞 - 当然,您可能总是分配足够的内存,但您可能会在某些时候忘记它,从而打开一个巨大的安全漏洞。

如果您希望该函数为您分配内存,则可以asprintf()改用:

int n = 10;
char *bla;
asprintf(&bla, "My number is %i", n);
// do something with bla
free(bla); // release the memory allocated by asprintf.
于 2012-04-23T18:09:33.313 回答
2

您正在寻找sprintf()

int ret;
int n=10;
char msg[50];  /* allocate some space for string */

/* Creates string like printf, but stores in msg */
ret = sprintf(msg,"My number is %i",n); 
printf(msg);
于 2012-04-23T17:52:01.967 回答
0

使用sprintf

int n=10
char *msg ="My number is %i";
char bla[32];   // Use an array which is large enough 
sprintf(bla, msg, n);
于 2012-04-23T17:51:13.573 回答
0

您需要使用类似 sprintf http://www.rohitab.com/discuss/topic/11505-sprintf-tutorial-in-c/

它基本上是这样使用的(记得先 malloc 的 msg 变量)

char* msg;
int ret = sprintf(msg,"My number is %i",10);
printf(msg);
于 2012-04-23T17:53:48.970 回答