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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
 
MMt
0 / 0 / 0
Регистрация: 29.04.2014
Сообщений: 169
#1

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

22.06.2014, 17:20. Просмотров 448. Ответов 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)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
22.06.2014, 17:20
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Почему не работает ТАКАЯ конструкция функции time (C++):

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

Верна ли такая конструкция? - C++
Здравствуйте, Помогите пожалуйста разобраться верно ли я передаю данные между функциями. Есть 2 функции. Функция 1...

Является ли такая конструкция реализацией цикла - C++
да понимаю глупый вопрос, но завтра экзамен, нужно уточнить одну деталь: for(int i=1;i&lt;10;i++) //&lt;-цикл ? { }

Compile-time и run-time методы и функции - C++
Добрый день. Есть две функции, которые делают идентичную работу: template&lt;bool leftShift, typename T&gt; T byteShift(T data) { ...

Обьясните, почему данная конструкция неправильна? - C++
Обьясните, почему такая конструкция неправильна. class Base { \\... protected : void* a; \\... } Base() { a = new...

Почему не работает счетчик в функции? - C++
я написал вот такую не хитрую функцию , в ней все работает как надо,кроме переменной &quot;V&quot; - в чем проблема?(rm и lm это сокращенный код...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Pjeroo
Землянин
34 / 34 / 12
Регистрация: 15.01.2013
Сообщений: 313
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
BatonPro
30 / 30 / 24
Регистрация: 21.06.2014
Сообщений: 81
22.06.2014, 17:57 #3
Функция ctime возвращает char* (указатель на массив символов(строку)),поэтому тип переменной sss должен быть:

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

Добавлено через 39 секунд
BatonPro, сделать sss как чаровский указатель?
0
Pjeroo
Землянин
34 / 34 / 12
Регистрация: 15.01.2013
Сообщений: 313
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
MMt
0 / 0 / 0
Регистрация: 29.04.2014
Сообщений: 169
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
ValeryS
Модератор
6631 / 5038 / 466
Регистрация: 14.02.2011
Сообщений: 16,849
22.06.2014, 19:28 #7
Цитата Сообщение от Pjeroo Посмотреть сообщение
char * test = new char[100];
* * time(&Time);
* * test = ctime(&Time);
не подскажешь, что будет с выделенной памятью?
0
MMt
0 / 0 / 0
Регистрация: 29.04.2014
Сообщений: 169
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
Pjeroo
Землянин
34 / 34 / 12
Регистрация: 15.01.2013
Сообщений: 313
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
MMt
0 / 0 / 0
Регистрация: 29.04.2014
Сообщений: 169
22.06.2014, 19:44  [ТС] #10
так... совсем запутал. почему ты не обозначил этот массив ранее?
C++
1
char test[100];
или это такая форма записи? создал указатель и сразу определил его как массив на 100 ячеек?

Добавлено через 6 минут
сходу 2 вопрос. дайте наводку какую функцию использовать или чем можно преобразовать данные о времени из time, чтобы выполнять ариффметичесские операции. например. Есть момент времени 1 и м. время 2. Надо узнать сколько между ними прошло секунд.
0
Pjeroo
Землянин
34 / 34 / 12
Регистрация: 15.01.2013
Сообщений: 313
22.06.2014, 19:46 #11
MMt,
1 Вариант - статическое выделение памяти под массив char на 100 элементов, кол-во элементов необходимо знать во время написания кода, изменить его во время выполнения не выйдет.
2 Вариант - динамическое выделение памяти под массив char на 100 элементов, т.е можно будет завести переменную, например n, считать значение из консоли и сделать new char[n], тем самым выделится память под массив char на n элементов.
0
ValeryS
Модератор
6631 / 5038 / 466
Регистрация: 14.02.2011
Сообщений: 16,849
22.06.2014, 19:49 #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;
}
0
Pjeroo
Землянин
34 / 34 / 12
Регистрация: 15.01.2013
Сообщений: 313
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
MMt
0 / 0 / 0
Регистрация: 29.04.2014
Сообщений: 169
22.06.2014, 20:01  [ТС] #14
зачем удалять массив?
0
ValeryS
Модератор
6631 / 5038 / 466
Регистрация: 14.02.2011
Сообщений: 16,849
22.06.2014, 20:12 #15
Цитата Сообщение от Pjeroo Посмотреть сообщение
Как насчет такого варианта?
Цитата Сообщение от Pjeroo Посмотреть сообщение
memcpy(test, ctime(&Time), 100);
можно
но глупо
строка содержит 15-20 символов,остальной мусор придется тоже копировать
Цитата Сообщение от MMt Посмотреть сообщение
зачем удалять массив?
когда будешь изучать динамическое выделение памяти тогда поймешь
пока прими на веру все что выделено new нужно удалять delete все что выделено malloc нужно удалять free
если грубо сказать то мы возвращаем системе память которую у неё занимали
если не возврашать то памяти у системы не будет и она не сможет нам в другой раз дать взаймы
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
22.06.2014, 20:12
Привет! Вот еще темы с ответами:

Почему не работает cout в перегруженной функции? - C++
Всем привет. Есть простое заданеие из первых уроков учебника Шитдта о перегрузке функции. Все компелится и работает если бы не одно НО....

табуляция функции. почему не работает код? - C++
#include &lt;iostream&gt; #include &lt;cmath&gt; #include &lt;stdlib.h&gt; #include &lt;cstdio&gt; using namespace std; float arctg(float x) ...

почему в функции add не работает gets_s? - C++
/* Записи в линейном списке содержат ключевое поле типа *char(строка символов). Сформировать двунаправленный список. Удалить К...

Не работает конструкция if else - C++
#include &lt;iostream&gt; using namespace std; void zeroSmaller(int&amp;, int&amp;); int main() { int number1, number2; ...


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
22.06.2014, 20:12
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru