Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.60/15: Рейтинг темы: голосов - 15, средняя оценка - 4.60
0 / 0 / 0
Регистрация: 29.04.2014
Сообщений: 185
1

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

22.06.2014, 17:20. Показов 2955. Ответов 17
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
вот фрагмент кода.
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. Ничего не подходит. НЕ пробовал поместить результат в массив, не понимаю как это можно сделать. И поможет ли это?
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
22.06.2014, 17:20
Ответы с готовыми решениями:

Массивы. Почему работает такая конструкция?
Почему это работает и где можно об этом прочитать? По объявлению массив статический, фактически -...

HTML. Почему у меня не работает такая конструкция?
После нажатия на ссылку файл не скачивается как хотелось бы, а открывается браузером. Сделал как...

Почему используется именно такая конструкция кода?
Встретил в исходном коде одного проекта следующее, привожу пример части класса: public final class...

Почему не проходит такая конструкция счетчика на странице HTML?
Господа, кто знает почему не проходит такая конструкция счетчика на странице HTML &lt;script...

17
Землянин
34 / 34 / 16
Регистрация: 15.01.2013
Сообщений: 312
22.06.2014, 17:38 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;
}
Что-то вроде этого?
1
31 / 31 / 32
Регистрация: 21.06.2014
Сообщений: 81
22.06.2014, 17:57 3
Функция ctime возвращает char* (указатель на массив символов(строку)),поэтому тип переменной sss должен быть:

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

Добавлено через 39 секунд
BatonPro, сделать sss как чаровский указатель?
0
Землянин
34 / 34 / 16
Регистрация: 15.01.2013
Сообщений: 312
22.06.2014, 19:11 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;
}
0
0 / 0 / 0
Регистрация: 29.04.2014
Сообщений: 185
22.06.2014, 19:25  [ТС] 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];
0
Модератор
Эксперт по электронике
8908 / 6677 / 918
Регистрация: 14.02.2011
Сообщений: 23,520
22.06.2014, 19:28 7
Цитата Сообщение от Pjeroo Посмотреть сообщение
char * test = new char[100];
* * time(&Time);
* * test = ctime(&Time);
не подскажешь, что будет с выделенной памятью?
0
0 / 0 / 0
Регистрация: 29.04.2014
Сообщений: 185
22.06.2014, 19:34  [ТС] 8
C++
1
2
3
char * test = new char[100]; // создаем указатель test. указатель на массив new char[100];
* * time(&Time); // в переменную тайм возвращаем данные о текущем времени.
* * test = ctime(&Time); // в указатель(а значит и в новый массив) записываем данные из переменной time. Только эти данные с помощью функции ctime преобразуем в человеко-читаемый вид.
п.с. я только учусь и на знаю.. по моему new char[100] это команда по созданию или определению типа переменной тест, или что она должна хранить... по крайней мере до такого на курсах еще не дошли.
0
Землянин
34 / 34 / 16
Регистрация: 15.01.2013
Сообщений: 312
22.06.2014, 19:35 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 элементов.
0
0 / 0 / 0
Регистрация: 29.04.2014
Сообщений: 185
22.06.2014, 19:44  [ТС] 10
так... совсем запутал. почему ты не обозначил этот массив ранее?
C++
1
char test[100];
или это такая форма записи? создал указатель и сразу определил его как массив на 100 ячеек?

Добавлено через 6 минут
сходу 2 вопрос. дайте наводку какую функцию использовать или чем можно преобразовать данные о времени из time, чтобы выполнять ариффметичесские операции. например. Есть момент времени 1 и м. время 2. Надо узнать сколько между ними прошло секунд.
0
Землянин
34 / 34 / 16
Регистрация: 15.01.2013
Сообщений: 312
22.06.2014, 19:46 11
MMt,
1 Вариант - статическое выделение памяти под массив char на 100 элементов, кол-во элементов необходимо знать во время написания кода, изменить его во время выполнения не выйдет.
2 Вариант - динамическое выделение памяти под массив char на 100 элементов, т.е можно будет завести переменную, например n, считать значение из консоли и сделать new char[n], тем самым выделится память под массив char на n элементов.
0
Модератор
Эксперт по электронике
8908 / 6677 / 918
Регистрация: 14.02.2011
Сообщений: 23,520
22.06.2014, 19:49 12
Цитата Сообщение от Pjeroo Посмотреть сообщение
delete test;
а что ты удаляешь???
ты уже указатель на выделенную память потерял вот здесь
Цитата Сообщение от Pjeroo Посмотреть сообщение
test = ctime(&Time);
этой строкой ты не копируешь из строки в строку а заменяешь указатель
указывал на 100 адрес будет указывать на 200
нужно копировать строку
для этого есть strcpy или sprintf
http://lord-n.narod.ru/downloa... strcpy.htm
http://lord-n.narod.ru/downloa... printf.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;
}
0
Землянин
34 / 34 / 16
Регистрация: 15.01.2013
Сообщений: 312
22.06.2014, 19:59 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;
}
Как насчет такого варианта?
0
0 / 0 / 0
Регистрация: 29.04.2014
Сообщений: 185
22.06.2014, 20:01  [ТС] 14
зачем удалять массив?
0
Модератор
Эксперт по электронике
8908 / 6677 / 918
Регистрация: 14.02.2011
Сообщений: 23,520
22.06.2014, 20:12 15
Цитата Сообщение от Pjeroo Посмотреть сообщение
Как насчет такого варианта?
Цитата Сообщение от Pjeroo Посмотреть сообщение
memcpy(test, ctime(&Time), 100);
можно
но глупо
строка содержит 15-20 символов,остальной мусор придется тоже копировать
Цитата Сообщение от MMt Посмотреть сообщение
зачем удалять массив?
когда будешь изучать динамическое выделение памяти тогда поймешь
пока прими на веру все что выделено new нужно удалять delete все что выделено malloc нужно удалять free
если грубо сказать то мы возвращаем системе память которую у неё занимали
если не возврашать то памяти у системы не будет и она не сможет нам в другой раз дать взаймы
0
0 / 0 / 0
Регистрация: 29.04.2014
Сообщений: 185
22.06.2014, 20:17  [ТС] 16
объяснил просто - "как угол дома" по больше бы таких ответов... спасибо огромное.
теперь 2 часть вопроса.
Это данные типа чар. Значит я не смогу оперировать ими, когда мне надо будет найти разницу во времени между 2 моментами. Верно?
0
Модератор
Эксперт по электронике
8908 / 6677 / 918
Регистрация: 14.02.2011
Сообщений: 23,520
22.06.2014, 20:43 17
Лучший ответ Сообщение было отмечено MMt как решение

Решение

Цитата Сообщение от 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;
1
0 / 0 / 0
Регистрация: 29.04.2014
Сообщений: 185
22.06.2014, 20:46  [ТС] 18
C++
1
 TemeDelta=TimeNew-TimeOld;
вот эта строка и интересовала. просто не понятна была логика как бы программа считала результат если у меня Тайм-Т возвращает набор символов... Спасибо.
0
22.06.2014, 20:46
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
22.06.2014, 20:46
Помогаю со студенческими работами здесь

Работает ли такая конструкция создания БД
Работает ли такая конструкция для создание ДБ db.execSQL(&quot;create table &quot; + grupName + predName...

Класс без имени: почему у меня скомпилировалась такая конструкция?
Приветствую! Почему у меня скомпилировалась такая конструкция? class { private: int n;...

Что означает символ $ и почему такая конструкция будет работать только в COM программе
mas1 db 1,2,3 len = $ - mas1 Пожалуйста, подскажите, что означает символ $ и почему такая...

Почему не работает конструкция
Почему не работает конструкция? var tbl = ; tbl=2; Пишет ошибку:

Почему не работает конструкция?
Данная конструкция почему-то не работает, цикл бесконечно повторяется, даже при вводе слова,...

Почему не работает конструкция?
Добрый день! Никак не пойму, как присвоить начальное значение полю структуры, которая сама...


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

Или воспользуйтесь поиском по форуму:
18
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru