0
私は単純な関数に問題があります(間違ったポインタアサイメントのために推測します)。 strptime
関数(文字列をとり、すべてのデータセットでstruct tm
を返す関数)がWindowsに存在しないので、私は他の基本関数を呼び出してstrptime関数の種類を作成しました。struct tm変数へのポインタは、変更を返すことができません
ここにテストコードがあります。 STRPTIME機能の中では、時間は十分に設定されていますが、メインでは情報が失われます。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <time.h>
void STRPTIME(char *strtm, struct tm *tminfo)
{
time_t rawtime;
int day, month, year;
sscanf(strtm, "%d-%d-%d\n", &year, &month, &day);
time(&rawtime);
tminfo = localtime(&rawtime);
tminfo->tm_year = year - 1900;
tminfo->tm_mon = month - 1;
tminfo->tm_mday = day;
mktime(tminfo);
printf("date %d-%d-%d\n", tminfo->tm_year, tminfo->tm_mon, tminfo->tm_mday);
}
int main()
{
char stm[11];
struct tm tminfo;
strcpy(stm, "2015-12-31");
STRPTIME(stm, &tminfo);
printf("tminfo %d-%d-%d\n", tminfo.tm_year, tminfo.tm_mon, tminfo.tm_mday);
return(0);
}
あなたは全く正しいです!私はそれを考えなかった! 'if'はlocaltimeが' NULL'を返さず、入力が 'NULL'でもあることを確認するチェックです、そうですか? – Stefano
btw、このソリューションはstrptimeの問題を追い越すのに適しているのでしょうか? – Stefano
はい、 'if'は' localtime'の結果と関数の引数の両方が 'NULL'でないことを確認します。これは' memcpy'の二つの引数が 'NULL'であってはならないからです。あなたのバージョンの 'strptime'は' format'引数を持たないので、それは実際には等価ではありません。だからそれが "十分に良い"かどうかは、おそらくあなたのユースケースに依存します。 [この質問](http://stackoverflow.com/questions/321849/strptime-equivalent-on-windows)も参照してください。 – DarkDust