0

timeval 構造体をそれぞれ含むいくつかの構造体を反復処理しようとしています。最初の日付を取得して START_DATE グローバル変数に保存できるようにしたいと考えています。また、反復処理された最後の構造体の日付も保存したいと考えています。END_DATE char* の反復ごとに時間を節約することでこれを行っています。

私が抱えている問題は、START_DATE = asctime(localtime(&curSec)); は 1 回だけ呼び出され、START_TIME はループの反復ごとに上書きされます。

誰もが指摘できるポイントに問題はありますか? しゃれは意図されていません。

//Global
char *START_DATE = NULL;
char *END_DATE = NULL;

int main(int argc, char *argv[]) {

//start while loop that gets a new header struct each loop
time_t curSec = (time_t)header->ts.tv_sec;
    if (!START_DATE)
        START_DATE = asctime(localtime(&curSec));
    END_DATE = asctime(localtime(&curSec));
//end while loop

printf("Start Date: %s", START_DATE);
printf("End Date: %s", END_DATE);
}
4

1 に答える 1

2

asctimeリファレンスを参照してください:

この文字列を保持する配列は、静的に割り当てられ、ctime関数とasctime関数の両方で共有されます。これらの関数のいずれかが呼び出されるたびに、この配列の内容が上書きされます。

asctime常に同じポインタを返します。これは、それが保持する内部バッファを指しているためSTART_DATEEND_DATE常に同じものを指します。

したがって、関数を呼び出すたびに、START_DATEEND_DATEが指している文字列が変更されます。

上書きされない文字列のコピーを取得するには、独自のバッファを割り当てて、を使用してコピーする必要がありますstrncpy(または、または同様の代わりにstrcpy使用する場合)。malloc(strlen(START_DATE) + 1)char buf[1024]

于 2012-11-08T20:55:10.500 に答える