最終更新日時(UTC):
が更新

履歴 編集

function
<ctime>

std::asctime(C++26で非推奨)

namespace std {
  char* asctime(const tm* timeptr);
}

この関数は、C++26で非推奨となった。代わりにstrftime関数や、<chrono>ライブラリの書式化機能を使用すること。

概要

カレンダー時間を表すtm構造体を、Www Mmm dd hh:mm:ss yyyy\n形式 (曜日、月、日、時、分、秒、年) の固定書式の文字列に変換する。

戻り値

Www Mmm dd hh:mm:ss yyyy\n形式 (曜日、月、日、時、分、秒、年) のヌル終端文字列へのポインタを返す。

戻り値は静的に確保された領域を指すため、asctimectimeの呼び出しのたびに上書きされる可能性がある。

非推奨・削除の詳細

C++26では、C言語側 (C23) で非推奨となったことにあわせて非推奨となった。この関数には以下の問題がある:

  • 結果を静的な内部バッファに書き込んでそのポインタを返すため、スレッドセーフではない
  • 内部バッファは固定長 (26バイト) であり、timeptrに範囲外の値 (たとえば桁数の大きい年) が格納されているとバッファオーバーフローを引き起こす危険性がある

これらの代わりに、フォーマットとバッファサイズを指定できるstrftime関数や、<chrono>ライブラリの書式化機能を使用すること。

#include <iostream>
#include <ctime>

int main()
{
  std::time_t t = std::time(nullptr);
  std::tm* lt = std::localtime(&t);
  std::cout << std::asctime(lt) << std::endl;
}

出力例

Fri May 29 14:30:00 2026

バージョン

言語

  • C++03

関連項目

参照