<分区>
我想将使用 printf 类型格式化字符串格式化的文本放入 C++ 字符串中。我想出了以下方法,它似乎有效,但我还没有发现其他人承认使用类似的技术,所以我想我会问为什么我不应该这样做的原因。
#include <stdio.h>
#include <stdarg.h>
#include <string>
void stringprintf(std::string &str, char const *fmt, ...) {
va_list ap;
va_start(ap, fmt);
size_t n = vsnprintf(NULL, 0, fmt, ap);
str.resize(n + 1, '\0');
char *pStr = (char *)(str.c_str());
(void)vsnprintf(pStr, str.capacity(), fmt, ap);
va_end(ap);
}
void dumpstring(std::string &str) {
printf("Object: %08X, buffer: %08X, size: %d, capacity: %d\ncontents: %s==\n",
&str, str.c_str(), str.size(), str.capacity(), str.c_str());
}
int main(int argc, char **argv) {
std::string str;
dumpstring(str);
stringprintf(str, "A test format. A number %d, a string %s!\n", 12345, "abcdefg");
printf("%s", str.c_str());
dumpstring(str);
return 0;
}