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

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

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

Студворк — интернет-сервис помощи студентам
вот фрагмент кода.
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)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
22.06.2014, 17:20
Ответы с готовыми решениями:

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

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

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

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

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

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

Добавлено через 6 минут
сходу 2 вопрос. дайте наводку какую функцию использовать или чем можно преобразовать данные о времени из time, чтобы выполнять ариффметичесские операции. например. Есть момент времени 1 и м. время 2. Надо узнать сколько между ними прошло секунд.
0
Землянин
 Аватар для Pjeroo
34 / 34 / 16
Регистрация: 15.01.2013
Сообщений: 312
22.06.2014, 19:46
MMt,
1 Вариант - статическое выделение памяти под массив char на 100 элементов, кол-во элементов необходимо знать во время написания кода, изменить его во время выполнения не выйдет.
2 Вариант - динамическое выделение памяти под массив char на 100 элементов, т.е можно будет завести переменную, например n, считать значение из консоли и сделать new char[n], тем самым выделится память под массив char на n элементов.
0
Модератор
Эксперт по электронике
8979 / 6745 / 921
Регистрация: 14.02.2011
Сообщений: 23,863
22.06.2014, 19:49
Цитата Сообщение от 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
Землянин
 Аватар для Pjeroo
34 / 34 / 16
Регистрация: 15.01.2013
Сообщений: 312
22.06.2014, 19:59
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  [ТС]
зачем удалять массив?
0
Модератор
Эксперт по электронике
8979 / 6745 / 921
Регистрация: 14.02.2011
Сообщений: 23,863
22.06.2014, 20:12
Цитата Сообщение от 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  [ТС]
объяснил просто - "как угол дома" по больше бы таких ответов... спасибо огромное.
теперь 2 часть вопроса.
Это данные типа чар. Значит я не смогу оперировать ими, когда мне надо будет найти разницу во времени между 2 моментами. Верно?
0
Модератор
Эксперт по электронике
8979 / 6745 / 921
Регистрация: 14.02.2011
Сообщений: 23,863
22.06.2014, 20:43
Лучший ответ Сообщение было отмечено 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  [ТС]
C++
1
 TemeDelta=TimeNew-TimeOld;
вот эта строка и интересовала. просто не понятна была логика как бы программа считала результат если у меня Тайм-Т возвращает набор символов... Спасибо.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
22.06.2014, 20:46
Помогаю со студенческими работами здесь

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

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
18
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Основы отладки веб-приложений на SDL3 по USB и Wi-Fi, запущенных в браузере мобильных устройств
8Observer8 07.02.2026
Содержание блога Браузер Chrome имеет средства для отладки мобильных веб-приложений по USB. В этой пошаговой инструкции ограничимся работой с консолью. Вывод в консоль - это часть процесса. . .
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru