如何在char
变量中存储变量?
例如,"date: %d-%d-%d", year, month, date
的{{1}}组件如何存储为char?
答案 0 :(得分:1)
sprintf
的第一个参数。char output[100];
sprintf(outout, "date: %d-%d-%d", year, month, date);
如果您能够使用C ++ 11编译器,请使用更安全版本的sprintf
,snprintf
。
char output[100];
snprintf(output, sizeof(output), "date: %d-%d-%d", year, month, date);
snprintf
确保您不会遇到缓冲区溢出错误。
答案 1 :(得分:1)
使用stringstream,如下所示。您不能使用单个字符来存储一堆字符,因为这是您尝试做的事情。
std::stringstream ss;
ss<<yourdate<<theday<<themonth<<theyear;
std::string mystring = ss.str();
std::cout<<mystring;
//to convert to a C-string
const char* aschar = mystring.c_str();
答案 2 :(得分:1)
使用std::snprintf
。你可以先用0长度调用snprintf
然后用适当大小的缓冲区再次调用它来弄清楚你需要多大的缓冲区。
#include <iostream>
#include <string>
#include <cstdio>
int main() {
const char* pattern = "date: %d-%d-%d";
int year = 2017;
int month = 4;
int date = 27;
int required = snprintf(nullptr, 0, pattern, year, month, date);
std::string formatted(required + 1, '\0');
snprintf(&formatted[0], formatted.size(), pattern, year, month, date);
// Trim off the extra '\0' character that snprintf puts at the end
formatted.resize(formatted.size() - 1);
std::cout << formatted << '\n';
}
我已使用std::string
来避免可能的资源泄漏,但您可以使用指向char*
ed数组的原始new
来执行此操作。