如何将“%d-%d-%d”,年,月,日`存储为字符?

时间:2017-04-27 04:56:20

标签: c++ string char printf std

如何在char变量中存储变量?

例如,"date: %d-%d-%d", year, month, date的{​​{1}}组件如何存储为char?

3 个答案:

答案 0 :(得分:1)

  1. 定义一个足以容纳格式化输出的字符串。
  2. 将其用作sprintf的第一个参数。
  3. char output[100];
    sprintf(outout, "date: %d-%d-%d", year, month, date);
    

    如果您能够使用C ++ 11编译器,请使用更安全版本的sprintfsnprintf

    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来执行此操作。