Некоторые этапы уточнения:
Этап 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); strftime (timeStr, 9, "% H:% M:% S", localtime (& current)); ', даже если это выглядит как несколько, потому что это делает ваш код ненужным в зависимости от (устаревшей) функции только для Windows , – DevSolar