質問: ### 前提・実現したいこと 日付を扱うプログラムを作っていまして、最初は普通の配列やら構造体を使っていたのですが、tm構造体というのがせっかくあるのだからそれを使ってしまおうと思ったのが運の尽きで、思った通りの動作ができず困っております。「そもそもそのコードのようなことをtm構造体でやるもんじゃない」というのでしたら仕方がないですが、どうにかモノにしたいです・ ### 発生している問題 数値を入力しても、結果が出ません。 ### ソースコード ``` #include #include #include #include #include #include void mjd2data(int mjd, struct tm *data){ int n, a, b; //printf("n=%d",n); a=4*n +3 +4*floor( 3/4.0* floor( 4*(n+1)/146067.0 ) ); b=5*floor(a%1461/4.0 )+2; data->tm_year=floor(a/1461.0); data->tm_mon =floor(b/153.0)+3; data->tm_mday=floor(b%153/5.0)+1; if(12 < data->tm_mon ){ data->tm_year+=1; data->tm_mon-=12; } } void main(){ int mjd; struct tm *data; char *a; scanf("%d",&mjd); mjd2data(mjd,data); puts("hoge"); printf("%4d/", data->tm_year); printf("%2d/", data->tm_mon); printf("%2d ", data->tm_mday); } ``` ### 試したこと *つけたり&つけたりしてみましたけど、表示されなかったり、表示されてもおかしな値だったりしました。 ### 補足情報(FW/ツールのバージョンなど) Win10 MinGW ### 追記 nmoa氏、pepperleaf氏の回答の通り修正しましたらできました。 しかしtoshi17922062氏の指摘の通り、ポインタが、あやふやなところが多いです。 実体やらなんやらがちょっとしっくりこないので修正の理由?がわからないですね。
回答: main()関数内の > > struct tm *data; > > > `struct tm data;` (* 不要。実体が確保されない) で、mjd2data()の呼び出しは、 `mjd2data(mjd, &data);` (& 必要) じゃないでしょうか。 あ、main()内の `data->` は、`data.` にする必要ありです。 ざっと気づいたところで。