0

私はこの単純なコード(プロジェクトの一部)を持っています:

void displayFileProperties(struct stat* file,char*  outputProperties , char * path)
{

    struct tm* time;

        // code 
        // code
        time = localtime(&file->st_mtim);


        // code 

}

日食が私に警告を投げ続ける場所:

passing argument 1 of ‘localtime’ from incompatible pointer type [enabled by default]   main.c  /ex4    line 340    C/C++ Problem

これを修正する方法はありますか?ありがとう

4

5 に答える 5

1

代わりにこれを使用したいと思うでしょう:

time = localtime(&file->st_mtime);

最後に「e」が追加されていることに注意してください。st_mtim は timespec で、「e」を追加すると time_t (必要なもの) になります。

于 2012-07-26T20:21:58.730 に答える
1

完全に変更された答え:

提案:

1) 以下のヘッダーを必ず #include してください。

#include <time.h>
#include <sys/types.h>
#include <sys/stat.h>

2)ポインタを「const」にキャストします

time = localtime((const time_t *)&file->st_mtime);

3) 何が起こったかを投稿する

================================================== ===

その他の提案:

1) 次の 2 つのリンクをお読みください。

カーネル 2.5.48 以降、stat 構造体は 3 つのファイル タイムスタンプ フィールドのナノ秒単位の解像度をサポートしています。_BSD_SOURCE または _SVID_SOURCE 機能テスト マクロが定義されている場合、glibc は st_atim.tv_nsec 形式の名前を使用して各フィールドのナノ秒コンポーネントを公開します。これらのフィールドは POSIX.1-2008 で指定されており、バージョン 2.12 以降では、_POSIX_C_SOURCE が 200809L 以上の値で定義されているか、_XOPEN_SOURCE が 700 以上の値で定義されている場合、glibc はこれらのフィールド名も公開します。前述のマクロが定義されていない場合、ナノ秒値は st_atimensec 形式の名前で公開されます。1 秒未満のタイムスタンプをサポートしていないファイル システムでは、ナノ秒フィールドは値 0 で返されます。

2) 明らかに、makefile (「機能する」) には Eclipse にはない #define があります。

おそらく、_POSIX_C_SOURCE および/または _XOPEN_SOURCE のいずれか/両方です。

次のコマンドを実行して、コマンド ライン (makefile?) 環境に何が存在するかを確認します。

gcc -dM -E - < /dev/null | less

3) 見つけたものを投稿してください。

于 2012-07-26T19:52:27.817 に答える
1

st_mtimstruct timespec (秒とナノ秒) です。あなたがしたいst_mtime

于 2012-07-26T19:52:01.530 に答える
0

Eclipse でも同じ問題が発生しました: フィールド st_mtime を解決できませんでした (セマンティック エラー)

プロジェクトを右クリックして Eclipse の問題を修正し、[Index] -> [Freshen All Files] を選択します。

于 2013-10-14T22:45:09.057 に答える