洗練のいくつかの段階:
段階1:コードを修正します。
struct tme {
char * intime; // You had a type mismatch
} e;
int main() { // Don't use void main()
char timeStr [9];
_strtime(timeStr);
e.intime=timeStr;
printf("The current time is %s \n", timeStr);
}
問題がここにあります:あなたのstruct tme
はそれのために全力を尽くすために、そのため正しく行うには、外部の世界に頼っています。もし我々がメインでtimeStr
を再利用したいのであれば? main
以外の関数でこの構造体を使用し、範囲外の変数にe.intime
を設定するとどうなりますか?
詳細化:struct tme
は時間バッファを所有する必要があります。
struct tme {
char intime[9]; // Put the buffer here, not in main.
} e;
int main() {
_strtime(e.intime);
printf("The current time is %s \n", e.intime);
}
ここにはまだ問題があります。そのバッファは誰でも変更でき、構造は単なる受動的なものです。
詳細:データを非表示にしてオブジェクトをアクティブにします。
struct tme {
const char * set_time() { _strtime (intime); return intime; }
const char * get_time() const { return intime; }
private:
char intime[9];
};
int main() {
printf("The current time is %s \n", e.set_time());
}
'_strtime'はWindowsの機能であり、コードスニペットが非標準に準拠していることに注意してください。まずは 'const time_t current = time(NULL); (非推奨)Windows-only関数に依存しないようにするため、strftime(timeStr、9、 "%H:%M:%S"、localtime(&current)); 。 – DevSolar