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

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

22.06.2014, 17:20. Показов 3359. Ответов 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
Модератор
Эксперт по электронике
8978 / 6744 / 921
Регистрация: 14.02.2011
Сообщений: 23,852
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
Модератор
Эксперт по электронике
8978 / 6744 / 921
Регистрация: 14.02.2011
Сообщений: 23,852
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
Модератор
Эксперт по электронике
8978 / 6744 / 921
Регистрация: 14.02.2011
Сообщений: 23,852
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
Модератор
Эксперт по электронике
8978 / 6744 / 921
Регистрация: 14.02.2011
Сообщений: 23,852
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
Ответ Создать тему
Новые блоги и статьи
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Access
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru