хранение системного времени в переменной в cpp - PullRequest
0 голосов
/ 19 сентября 2011

Я хочу сохранить местное время в переменной типа char.вот код, который я использовал.но он говорит, что

"не может преобразовать символ * в символ"

Вот мой код:

#include <stdio.h>
#include <time.h>

struct tme
{
  char intime;
}e;
void main( )
{

  char timeStr [9];
 _strtime( timeStr );
  e.intime=timeStr;
  printf( "The current time is %s \n", timeStr);
 }

Заранее спасибо.

Ответы [ 3 ]

0 голосов
/ 19 сентября 2011
  e.intime=timeStr;

timeStr относится к типу char [9]. Распадается на указатель, указывающий на первый элемент во время присваивания или при вызове функции, используемой в качестве параметра.

e.intime относится к типу char. char и char* не совместимы по типу, и компилятор жалуется вам на это. Вместо этого вы можете сделать -

struct tme
{
  char intime[10]; // +1 for the termination character to play safe
}e;

Теперь strcpy можно использовать для копирования времени в переменную-член.

strcpy(e.intime, timeStr);

Если это C ++, используйте std :: string вместо необработанных массивов.

0 голосов
/ 19 сентября 2011

Некоторые этапы доработки:

Этап 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());
}
0 голосов
/ 19 сентября 2011

Это просто, у вас есть массив символов timeStr длиной 9, и вы пытаетесь присвоить его char intime. Есть несовместимость типов. Думайте об этом, как char[] никогда не равно char.

Вы можете решить это следующим образом (но я не знаю, чего вы хотите достичь):

struct tme
{
  char* intime;
}e;

PS : MSDN утверждает, что ( _strtime ):

// Примечание: _strtime устарело; рассмотрите возможность использования _strtime_s вместо

...