2017/03/14

[c/c++]asctime()は改行を含む

EPOCH秒を使っているところがあったので、日付形式で表示させたいと思った。
標準関数って、便利だわ。

 

01: #include <stdio.h>
02: #include <time.h>
03: 
04: int main(int argc, char *argv[])
05: {
06:     time_t now = time(NULL);
07:     printf("now(%s)\n", ctime(&now));
08: 
09:     return 0;
10: }

結果

now(Tue Mar 14 09:42:57 2017
)

 

なんだ、この改行は。。。
と思ったが、asctime()は改行を含めた文字列を返す仕様らしい。

 

まあ、それが嫌だったらstrftime()を使って自分で文字列を作れということなのだろうが、なんでわざわざ改行を含めた文字列を生成しようと思ったのだろう?
普通に\0で終わっておけば、改行するなどはこちらで勝手にやるのに。

pythonにも同じような関数があるのだが、わざわざ「Cとは違って改行は含まない」と書いてあるように、だいたいの人にとって不要と思われているのだ。
https://docs.python.jp/3/library/time.html

 

一度付けてしまったのでそれ以降は外せなくなった、という経緯だろうから、当時は何か理由があったのだろう。。。

0 件のコメント:

コメントを投稿

コメントありがとうございます。
スパムかもしれない、と私が思ったら、
申し訳ないですが勝手に削除することもあります。