- ctime[meta header]
- std[meta namespace]
- function[meta id-type]
- cpp26deprecated[meta cpp]
namespace std {
char* ctime(const time_t* timer);
}- time_t[link time_t.md]
この関数は、C++26で非推奨となった。代わりにstrftime関数や、<chrono>ライブラリの書式化機能を使用すること。
経過秒を表すtime_t値を、ローカル時間を表すWww Mmm dd hh:mm:ss yyyy\n形式 (曜日、月、日、時、分、秒、年) の固定書式の文字列に変換する。
std::ctime(timer)はstd::asctime(std::localtime(timer))と等価である。
Www Mmm dd hh:mm:ss yyyy\n形式 (曜日、月、日、時、分、秒、年) のヌル終端文字列へのポインタを返す。
戻り値は静的に確保された領域を指すため、asctimeやctimeの呼び出しのたびに上書きされる可能性がある。
C++26では、C言語側 (C23) で非推奨となったことにあわせて非推奨となった。この関数には以下の問題がある:
- 結果を静的な内部バッファに書き込んでそのポインタを返すため、スレッドセーフではない
- 内部バッファは固定長 (26バイト) であり、
timerが範囲外の値 (たとえば桁数の大きい年) を表しているとバッファオーバーフローを引き起こす危険性がある
これらの代わりに、フォーマットとバッファサイズを指定できるstrftime関数や、<chrono>ライブラリの書式化機能を使用すること。
#include <iostream>
#include <ctime>
int main()
{
std::time_t t = std::time(nullptr);
std::cout << std::ctime(&t) << std::endl;
}- std::ctime[color ff0000]
Fri May 29 14:30:00 2026
- C++03
- P3348R4 C++26 should refer to C23 not C17
- C++26がC23を参照するようになり、この関数が非推奨となった