用C语言构建格式化字符串
假设我有很多用C语言构建格式化字符串,c,string,printf,C,String,Printf,假设我有很多printf用法,但我想将它们存储在一个字符串中,然后一次性打印出来。想象一下下面的情况: printf("%d,", _counter); printf("IS REAL,", _condition); printf("%f,", _value); printf("%d,\r\n", _time); 我想做的是构建一个字符串,当我确定要在屏幕上打印它时,只使用一次printf。例如,上述代码的输出将为: 1,IS REAL,663,1044 在C中,我会使用StringBuil
printf
用法,但我想将它们存储在一个字符串中,然后一次性打印出来。想象一下下面的情况:
printf("%d,", _counter);
printf("IS REAL,", _condition);
printf("%f,", _value);
printf("%d,\r\n", _time);
我想做的是构建一个字符串,当我确定要在屏幕上打印它时,只使用一次printf
。例如,上述代码的输出将为:
1,IS REAL,663,1044
在C中,我会使用StringBuilder
…但在C中如何做到这一点?您使用sprintf()
,或者(更好)
我跳过了
\u条件
变量访问,因为该行没有进行任何格式设置。正如建议的那样,sprintf
是您所要求的,但是我相信,您始终可以这样做:
printf("%d, IS REAL(%d), %f, %d,\r\n", _counter, _condition, _value, _time);
sprintf返回写入的字符数,这样您就可以像这样使用它:
#include <stdio.h>
#include <string.h>
int main() {
char buf[256];
int s = sprintf(buf, "This %d,", 12);
s += sprintf(buf+s, "and this %f.", 1.0);
s += sprintf(buf+s, ",also %f", 2.0);
printf("%s\n", buf);
return 0;
}
#包括
#包括
int main(){
char-buf[256];
int s=sprintf(buf,“这个%d,”,12);
s+=sprintf(buf+s,“这个%f.”,1.0);
s+=sprintf(buf+s“,也称为%f”,2.0);
printf(“%s\n”,buf);
返回0;
}
创建一个函数,将当前字符串和要插入的块作为参数
然后malloc在char上创建一个新指针,长度等于(strlen(string)+strlen(chunk)+1)
您可以使用sprintf比方说:
sprintf(newstring, "%s%s", string, chunk);
然后释放最后两个字符串(如果手动分配)
返回新字符串的指针。要回答您的问题,您可以添加任意数量的格式化程序或字符串
printf("%d,IS REAL,%f,%d,\r\n", _counter, _value, _time);
注意,我推荐了这个:
printf("IS REAL,", _condition);
因为您将它作为一个参数,但是没有为它指定格式,只是纯文本,所以它是错误的。如果要将\u条件
打印为值,则还必须添加格式说明符,如%d
或任何\u条件
是什么。如果是布尔值,则可以执行以下操作:
printf(""%s,", (_condition == 1) ? "IS REAL" : "IS NOT");
但我不知道你的代码,所以这只是一个建议,假设你想这样做
如果你想在内存中构建一个字符串,首先收集所有数据,你必须使用
s(n)printf
,但是你必须确保为你的字符串分配和释放足够的空间。你在调用snprintf
时忘记了大小
,谢谢,修复了!这在实际代码中可能永远不会发生。:)
printf(""%s,", (_condition == 1) ? "IS REAL" : "IS NOT");