Форум программистов, компьютерный форум CyberForum.ru

Почему не работает ТАКАЯ конструкция функции time - C++

Восстановить пароль Регистрация
 
MMt
0 / 0 / 0
Регистрация: 29.04.2014
Сообщений: 168
22.06.2014, 17:20     Почему не работает ТАКАЯ конструкция функции time #1
вот фрагмент кода.
C++
1
2
3
4
5
6
7
8
9
int main(){
    time_t testsec; //определил переменную типа ТАймТ
    
time(&testsec); // Извлекаю в переменную информацию о времени. ТОесть теперь у меня ячейка памяти типа ТаймТ содержит ВНУТРИ СЕБЯ информацию о времени.
 
    cout    << ctime(&testsec); // преобразую информацию в человеко-понятный вид. и вывожу на экран.
    
return 0;
}
а вот второй кусочек кода.
C++
1
2
3
4
5
6
7
8
9
10
int main(){
    time_t testsec;
    ТИП_ПЕРЕМЕННОЙ sss; 
    time(&testsec); 
    
    sss = ctime(&testsec); // в новую созданную переменную хочу поместить информацию о времени.
    
    cout    << sss;
    return 0;
}
Почему я не могу в переменную поместить значение аргумента функции сТайм? ПРобовал разніе типі данніх для переменной sss. Ничего не подходит. НЕ пробовал поместить результат в массив, не понимаю как это можно сделать. И поможет ли это?
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
22.06.2014, 17:20     Почему не работает ТАКАЯ конструкция функции time
Посмотрите здесь:

C++ Не работает конструкция с new
Lvalue required почему высвечивается такая ошибка? C++
табуляция функции. почему не работает код? C++
Почему не работает счетчик в функции? C++
Почему точность Double такая же как у Float ? C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Pjeroo
Землянин
 Аватар для Pjeroo
33 / 33 / 12
Регистрация: 15.01.2013
Сообщений: 313
22.06.2014, 17:38     Почему не работает ТАКАЯ конструкция функции time #2
MMt,
C++
1
2
3
4
5
6
7
8
9
int main()
{
    time_t Time;
    char test[100];
    time(&Time);
    strcpy(test, ctime(&Time));
    cout << test;
    return 0;
}
Что-то вроде этого?
BatonPro
30 / 30 / 24
Регистрация: 21.06.2014
Сообщений: 81
22.06.2014, 17:57     Почему не работает ТАКАЯ конструкция функции time #3
Функция ctime возвращает char* (указатель на массив символов(строку)),поэтому тип переменной sss должен быть:

C++
1
char* sss;
MMt
0 / 0 / 0
Регистрация: 29.04.2014
Сообщений: 168
22.06.2014, 18:58  [ТС]     Почему не работает ТАКАЯ конструкция функции time #4
Pjeroo я пробовал переменной sss давать тип чар.
Почему с функцией
C++
1
strcpy(test, ctime(&Time));
код работает. а с
C++
1
sss = ctime(&testsec);
нет?

Добавлено через 39 секунд
BatonPro, сделать sss как чаровский указатель?
Pjeroo
Землянин
 Аватар для Pjeroo
33 / 33 / 12
Регистрация: 15.01.2013
Сообщений: 313
22.06.2014, 19:11     Почему не работает ТАКАЯ конструкция функции time #5
MMt,
C++
1
2
3
4
5
6
7
8
9
int main()
{
    time_t Time;
    char * test = new char[100];
    time(&Time);
    test = ctime(&Time);
    cout << test;
    return 0;
}
MMt
0 / 0 / 0
Регистрация: 29.04.2014
Сообщений: 168
22.06.2014, 19:25  [ТС]     Почему не работает ТАКАЯ конструкция функции time #6
я правильно понимаю?
я создавал char sss; и потом хотел в эти 4 байта(1 ячейка в памяти) запихнуть все данные аргумента time(&Time)?
А надо было создать не 1 ячейку памяти тип чар, а массив данных, чтоб туда поместилась вся информация!
По этому в коде
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
2
3
4
5
6
7
8
9
int main()
{
    time_t Time;
    char * test = new char[100];
    time(&Time);
    test = ctime(&Time);
    cout << test;
    return 0;
}
мы и использовали указатель на новосозданный массив
C++
1
char * test = new char[100];
ValeryS
Модератор
6377 / 4843 / 442
Регистрация: 14.02.2011
Сообщений: 16,048
22.06.2014, 19:28     Почему не работает ТАКАЯ конструкция функции time #7
Цитата Сообщение от Pjeroo Посмотреть сообщение
char * test = new char[100];
* * time(&Time);
* * test = ctime(&Time);
не подскажешь, что будет с выделенной памятью?
MMt
0 / 0 / 0
Регистрация: 29.04.2014
Сообщений: 168
22.06.2014, 19:34  [ТС]     Почему не работает ТАКАЯ конструкция функции time #8
C++
1
2
3
char * test = new char[100]; // создаем указатель test. указатель на массив new char[100];
* * time(&Time); // в переменную тайм возвращаем данные о текущем времени.
* * test = ctime(&Time); // в указатель(а значит и в новый массив) записываем данные из переменной time. Только эти данные с помощью функции ctime преобразуем в человеко-читаемый вид.
п.с. я только учусь и на знаю.. по моему new char[100] это команда по созданию или определению типа переменной тест, или что она должна хранить... по крайней мере до такого на курсах еще не дошли.
Pjeroo
Землянин
 Аватар для Pjeroo
33 / 33 / 12
Регистрация: 15.01.2013
Сообщений: 313
22.06.2014, 19:35     Почему не работает ТАКАЯ конструкция функции time #9
ValeryS,
C++
1
2
3
4
5
6
7
8
9
10
11
int main()
{
    time_t Time;
    char * test = new char[100];
    time(&Time);
    test = ctime(&Time);
    cout << test;
 
    delete test;
    return 0;
}
Действительно, чойта я.

Добавлено через 41 секунду
MMt, это выделение памяти под массив char на 100 элементов.
MMt
0 / 0 / 0
Регистрация: 29.04.2014
Сообщений: 168
22.06.2014, 19:44  [ТС]     Почему не работает ТАКАЯ конструкция функции time #10
так... совсем запутал. почему ты не обозначил этот массив ранее?
C++
1
char test[100];
или это такая форма записи? создал указатель и сразу определил его как массив на 100 ячеек?

Добавлено через 6 минут
сходу 2 вопрос. дайте наводку какую функцию использовать или чем можно преобразовать данные о времени из time, чтобы выполнять ариффметичесские операции. например. Есть момент времени 1 и м. время 2. Надо узнать сколько между ними прошло секунд.
Pjeroo
Землянин
 Аватар для Pjeroo
33 / 33 / 12
Регистрация: 15.01.2013
Сообщений: 313
22.06.2014, 19:46     Почему не работает ТАКАЯ конструкция функции time #11
MMt,
1 Вариант - статическое выделение памяти под массив char на 100 элементов, кол-во элементов необходимо знать во время написания кода, изменить его во время выполнения не выйдет.
2 Вариант - динамическое выделение памяти под массив char на 100 элементов, т.е можно будет завести переменную, например n, считать значение из консоли и сделать new char[n], тем самым выделится память под массив char на n элементов.
ValeryS
Модератор
6377 / 4843 / 442
Регистрация: 14.02.2011
Сообщений: 16,048
22.06.2014, 19:49     Почему не работает ТАКАЯ конструкция функции time #12
Цитата Сообщение от Pjeroo Посмотреть сообщение
delete test;
а что ты удаляешь???
ты уже указатель на выделенную память потерял вот здесь
Цитата Сообщение от Pjeroo Посмотреть сообщение
test = ctime(&Time);
этой строкой ты не копируешь из строки в строку а заменяешь указатель
указывал на 100 адрес будет указывать на 200
нужно копировать строку
для этого есть strcpy или sprintf
http://lord-n.narod.ru/download/book.../14/strcpy.htm
http://lord-n.narod.ru/download/book...13/sprintf.htm

вот как должна выглядеть твоя прога
C++
1
2
3
4
5
6
7
8
9
10
11
int main()
{
    time_t Time;
    char * test = new char[100];
    time(&Time);
    strcpy(test,ctime(&Time)); // копируем строку времени в свою строку
    cout << test;
 
    delete [] test;// выделяли массив и удаляем массив
    return 0;
}
или так
C++
1
2
3
4
5
6
7
8
9
10
11
int main()
{
    time_t Time;
    char * test = new char[100];
    time(&Time);
    sprintf(test,"%s",ctime(&Time));// копируем строку времени в свою строку
    cout << test;
 
    delete[] test; // выделяли массив и удаляем массив
    return 0;
}
Pjeroo
Землянин
 Аватар для Pjeroo
33 / 33 / 12
Регистрация: 15.01.2013
Сообщений: 313
22.06.2014, 19:59     Почему не работает ТАКАЯ конструкция функции time #13
ValeryS, хмм, приму к сведению, спасибо.
C++
1
2
3
4
5
6
7
8
9
10
int main()
{
    time_t Time;
    char *test = new char[100];
    time(&Time);
    memcpy(test, ctime(&Time), 100);
    cout << test;
    delete [] test;
    return 0;
}
Как насчет такого варианта?
MMt
0 / 0 / 0
Регистрация: 29.04.2014
Сообщений: 168
22.06.2014, 20:01  [ТС]     Почему не работает ТАКАЯ конструкция функции time #14
зачем удалять массив?
ValeryS
Модератор
6377 / 4843 / 442
Регистрация: 14.02.2011
Сообщений: 16,048
22.06.2014, 20:12     Почему не работает ТАКАЯ конструкция функции time #15
Цитата Сообщение от Pjeroo Посмотреть сообщение
Как насчет такого варианта?
Цитата Сообщение от Pjeroo Посмотреть сообщение
memcpy(test, ctime(&Time), 100);
можно
но глупо
строка содержит 15-20 символов,остальной мусор придется тоже копировать
Цитата Сообщение от MMt Посмотреть сообщение
зачем удалять массив?
когда будешь изучать динамическое выделение памяти тогда поймешь
пока прими на веру все что выделено new нужно удалять delete все что выделено malloc нужно удалять free
если грубо сказать то мы возвращаем системе память которую у неё занимали
если не возврашать то памяти у системы не будет и она не сможет нам в другой раз дать взаймы
MMt
0 / 0 / 0
Регистрация: 29.04.2014
Сообщений: 168
22.06.2014, 20:17  [ТС]     Почему не работает ТАКАЯ конструкция функции time #16
объяснил просто - "как угол дома" по больше бы таких ответов... спасибо огромное.
теперь 2 часть вопроса.
Это данные типа чар. Значит я не смогу оперировать ими, когда мне надо будет найти разницу во времени между 2 моментами. Верно?
ValeryS
Модератор
6377 / 4843 / 442
Регистрация: 14.02.2011
Сообщений: 16,048
22.06.2014, 20:43     Почему не работает ТАКАЯ конструкция функции time #17
Сообщение было отмечено автором темы, экспертом или модератором как ответ
Цитата Сообщение от MMt Посмотреть сообщение
Это данные типа чар.
это строка( так скажем Си строка,потому что есть строка std::string)
строка в Си это массив char оканчивающийся 0
Цитата Сообщение от MMt Посмотреть сообщение
Значит я не смогу оперировать ими, когда мне надо будет найти разницу во времени между 2 моментами. Верно?
совершенно верно, но это и не нужно
достаточно переменной типа time_t
этот тип хранит количество секунд прошедшие с 1 января 1970 года
значит имеем две переменных одну для начала другую для конца
и вычисляем их разность
например
C++
1
2
3
4
5
6
7
8
9
time_t TimeOld, TimeNew, TemeDelta;
    char test[100];
    time(&TimeOld);
   .......................
   // здесь что то делаем
   time(&TimeNew);
  TemeDelta=TimeNew-TimeOld;
    strcpy(test, ctime(&TemeDelta));
  cout <<"прошло времени"<< test;
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
22.06.2014, 20:46     Почему не работает ТАКАЯ конструкция функции time
Еще ссылки по теме:

Почему RTTI работает только с иерархией классов, содержащие виртуальные функции? C++
Верна ли такая конструкция? C++
C++ Является ли такая конструкция реализацией цикла

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
MMt
0 / 0 / 0
Регистрация: 29.04.2014
Сообщений: 168
22.06.2014, 20:46  [ТС]     Почему не работает ТАКАЯ конструкция функции time #18
C++
1
 TemeDelta=TimeNew-TimeOld;
вот эта строка и интересовала. просто не понятна была логика как бы программа считала результат если у меня Тайм-Т возвращает набор символов... Спасибо.
Yandex
Объявления
22.06.2014, 20:46     Почему не работает ТАКАЯ конструкция функции time
Ответ Создать тему
Опции темы

Текущее время: 18:34. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru