将格式化的字符串转换为变量

tva*_*vaz 1 c string printf

是否有任何C函数(或方法)将格式化的字符串作为普通字符串获取?

例如:

printf("this is %s", "a message")
Run Code Online (Sandbox Code Playgroud)

我想在一个变量printf()的输出。这应该很简单,但是除了将其写入文件并读取或连接所需的次数外,我没有其他东西。"this is a message"char*

那么,是否有功能或简单的方法将任何格式化的字符串放入C中的单个字符串变量中?

For*_*Bru 5

你想要么sprintfsnprintf

用法

char str[128];

//sprintf(str, "hello %s", "world");
snprintf(str, 128, "hello %s",  "world");
Run Code Online (Sandbox Code Playgroud)

请注意,这样snprintf做比较安全,因为它将字符串切成遇到溢出的适当长度。

文献资料


为什么snprintf安全

snprintfstr在格式字符串format的控制下,将输出写入字符串,该字符串指定如何转换后续参数以输出。与相似sprintf(3),除了size指定要产生的最大字符数。尾随nul字符计入此限制,因此您必须至少size为分配字符str

如果size为零,则不写入任何内容,并且str可以为null。否则,n-1将丢弃st 以外的输出字符,而不是将其写入str,并且在实际写入的字符的末尾写入一个nul字符str。如果在重叠的对象之间进行复制,则行为是不确定的。

成功后,返回大小足够大时将要写入的字符数,不计入终止nul字符。因此,当且仅当返回值是非负数且小于大小时,零终止输出才被完全写入。错误时,返回-1(即编码错误)。

也就是说,snprintf保护程序员免受缓冲区溢出的侵害,而sprintf实际上却并非如此。