写了一个非常简单的C函数来说明我想要简化的内容:
void main(int argc, char *argv[]){
char *me="Foo";
char *you="Bar";
char us[100];
memset(us,100,0x00);
sprintf(us,"You: %s\n",you);
sprintf(us+strlen(us),"Me: %s\n",me);
sprintf(us+strlen(us),"We are %s and %s!\n",me,you);
printf(us);
}
似乎应该有一个标准的库函数来处理我正在用sprintf做的事情并推进指针,不是吗?已经年因为我已经完成了任何数量的C ...
谢谢, -AJ
答案 0 :(得分:10)
sprintf
返回写入的非NUL字符数。
int len = 0;
len += sprintf(us+len, ...);
len += sprintf(us+len, ...);
...
答案 1 :(得分:2)
嗯...你不能只使用类似的东西:
sprintf(us, "You: %s\nMe: %s\nWe are %s and %s!\n, you, me, me, you);
答案 2 :(得分:1)
答案 3 :(得分:1)
char *me="Foo";
char *you="Bar";
char us[100];
char* out = us;
out += sprintf(out,"You: %s\n",you);
out += sprintf(out,"Me: %s\n",me);
out += sprintf(out,"We are %s and %s!\n",me,you);
printf("%s", us);
答案 4 :(得分:1)
永远不要使用非常量字符串作为printf
的第一个参数(或fprintf
的第二个参数。这是不好的做法。尝试将me
变量更改为{{1}并告别你的堆栈并向"Muahaha %n%d%n%d%n%d%n%d%n"
问好。SEGFAULT
将尝试格式化字符串,但你没有提供任何参数来处理它,即使有格式说明符字符串printf
不知道你没有给它任何参数。
如果要输出“预格式化”字符串,请使用printf
。很少有案例将fputs(str,stdout)
与非常量格式字符串一起使用。