【C言語】ctimeがsegmentation fault
C言語でクライアント・サーバー型のプログラムを作っていて、Macのローカルで開発した後にサーバプログラムをCentOSに移した時にctimeでハマったのでメモ。
経緯
- クライアント・サーバ型のプログラム
- Macのローカル環境で動かしたら問題なく動いた
- 問題はサーバ側のプログラムを、別のCentOSに移すと生じた
- ctimeの部分でsegmentation faultが発生した
問題
ctimeを使おうとするとsegmentation faultが生じる
原因
time.hをincludeしていなかった
問題となったプログラム
送受信日時を表示するために、以下のような形のプログラムを書いていました。
#include <stdio.h> #include <sys/time.h> int main(void) { struct timeval time; gettimeofday(&time, NULL); printf("%s", ctime((time_t *)&time)); }
これをMacでコンパイルするとsegmentation faultは発生しません。が、しかし、CentOSでコンパイルするとsegmentation faultが発生します。
このプログラムに
#include <time.h>
を加えてあげることでCentOSでも問題なく動くようになります。同じようなことで困っている方が居てお役に立てれば。
(includeし忘れはコンパイル時にエラーが出るとばかり思い込んでいたので気づきませんでした。。。(;´д`)トホホ…
思うところ
今回のMacOSでは実行できたのは、gccと打っていても裏ではclangが動いているからかな―。と想像してます。Mavericksからgccはclangのエイリアスとなったようなので。
きっとclangがよろしくやってくれていたのでしょう。
どうなんでしょ。