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

How to store "%d-%d-%d", year, month, date` as a char?

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

例如 printf("date: %d-%d-%d", year, month, date)"date: %d-%d-%d", year, month, date 组件如何存储为字符?

  1. 定义一个足够大的字符串来容纳格式化输出。
  2. 将其用作 sprintf 的第一个参数。

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 确保您不会 运行 进入缓冲区溢出错误。

使用如下所示的字符串流。你不能用一个字符来存储一堆字符,因为那是你想要做的。

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();

使用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, '[=10=]');
    snprintf(&formatted[0], formatted.size(), pattern, year, month, date);
    // Trim off the extra '[=10=]' character that snprintf puts at the end
    formatted.resize(formatted.size() - 1);

    std::cout << formatted << '\n';
}

我使用 std::string 来避免可能的资源泄漏,但您可以使用指向 newed 数组的原始 char* 来做到这一点。