如何将“%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
组件如何存储为字符?
- 定义一个足够大的字符串来容纳格式化输出。
- 将其用作
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
确保您不会 运行 进入缓冲区溢出错误。
使用如下所示的字符串流。你不能用一个字符来存储一堆字符,因为那是你想要做的。
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
来避免可能的资源泄漏,但您可以使用指向 new
ed 数组的原始 char*
来做到这一点。
如何在char
变量中存储变量?
例如 printf("date: %d-%d-%d", year, month, date)
的 "date: %d-%d-%d", year, month, date
组件如何存储为字符?
- 定义一个足够大的字符串来容纳格式化输出。
- 将其用作
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
确保您不会 运行 进入缓冲区溢出错误。
使用如下所示的字符串流。你不能用一个字符来存储一堆字符,因为那是你想要做的。
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
来避免可能的资源泄漏,但您可以使用指向 new
ed 数组的原始 char*
来做到这一点。