0 / 0 / 0
Регистрация: 25.06.2013
Сообщений: 124
1

Как достать значения из char*

25.06.2013, 12:08. Показов 1177. Ответов 10
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Есть функция
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
char* Timer(void)
{
#pragma code ("Kernel32.dll");
VOID GetLocalTime(LPSYSTEMTIME lpSysTime);
#pragma code();
 
SYSTEMTIME sysTime;
char szTime[6]=" ";
GetLocalTime(&sysTime);
sprintf(szTime,"%02d:%02d",sysTime.wHour, sysTime.wMinute);
 
printf(szTime); 
 
return szTime;
}
 
и есть кнопка на которой висит следующее
 
{
char* buff=Timer();
printf(buff);
 
}
На экране появляется время первое - в нормальном виде и потом какие то загибуллины... что не так во втором коде?
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
25.06.2013, 12:08
Ответы с готовыми решениями:

Как достать кириллические символы из char*
Добрый день. Использую библиотеку, которая возвращает строку в char*. Если создавать std::wstring...

Как достать из массива char переменные типа double, int, bool
Имеется массив char temp. в этот массив записана переменная double (начинается ,например, с temp),...

Почему в setnamedisc нужно использовать char * для установки значения, а при возвращении значения тип метода должен быть char* ?
Вопрос такой, почему в методе setnamedisc нужно использовать char *s для установки значения, а при...

Как достать значения с XML ?
В результате GetResponse() получаю с сервера XML текст. далее: var dsetRes : DataSet = new...

10
15 / 15 / 8
Регистрация: 25.06.2013
Сообщений: 63
25.06.2013, 12:11 2
char szTime[7]=" ";
0
0 / 0 / 0
Регистрация: 25.06.2013
Сообщений: 124
25.06.2013, 12:15  [ТС] 3
Цитата Сообщение от iv-a Посмотреть сообщение
char szTime[7]=" ";
Я полный чай... Можно объяснить? К тому же если в функции писать return "привет"... Он адекватное значение получает "привет"...
0
15 / 15 / 8
Регистрация: 25.06.2013
Сообщений: 63
25.06.2013, 12:24 4
размер массива должен быть 7. это для символа '\0'
если дата вот такая 25:06:13
0
0 / 0 / 0
Регистрация: 25.06.2013
Сообщений: 124
25.06.2013, 12:28  [ТС] 5
12:24pTtPщ©Sgё

...
Дело не в этом, мне сойдут и мунуты... Но получаю на экране следующее 12:24pTtPщ©Sgё , где 12:24 это printf(szTime) в самой функции , а pTtPщ©Sgё это printf(buff)... Что то не так обрабатываю во втором коде?

Если использовать для вывода времени команду printf("%s", ... ) получаю printf(szTime) 12:29 и printf("%s",buff) - '†t
0
15 / 15 / 8
Регистрация: 25.06.2013
Сообщений: 63
25.06.2013, 12:30 6
я не знаю
0
0 / 0 / 0
Регистрация: 25.06.2013
Сообщений: 124
25.06.2013, 13:11  [ТС] 7
Цитата Сообщение от iv-a Посмотреть сообщение
я не знаю
Я тоже

Добавлено через 34 минуты
ХЕЛП!!!
0
:)
Эксперт С++
4773 / 3267 / 497
Регистрация: 19.02.2013
Сообщений: 9,046
25.06.2013, 13:12 8
Цитата Сообщение от Anforcer Посмотреть сообщение
char* Timer(void)
Вы из функции возвращаете указатель на локальный буфер szTime. После выполнения функции он не существует.
Переделайте хотя бы так:

C++
1
2
3
4
5
6
char* Timer(char* buf)
{
   // ...
   sprintf(buf,"%02d:%02d",sysTime.wHour, sysTime.wMinute);
   return buf;
}
И вызывайте так:
C++
1
2
char buf[6];
printf(Timer( buf ));
А вообще, надо проверять длину строки, и есть же функция strftime() для получения строки форматированной даты.
0
Ушел с форума
Эксперт С++
16473 / 7436 / 1187
Регистрация: 02.05.2013
Сообщений: 11,617
Записей в блоге: 1
25.06.2013, 13:14 9
Сообщение удалено.
0
500 / 474 / 63
Регистрация: 26.01.2011
Сообщений: 2,033
25.06.2013, 13:18 10
вот так работает -
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
#include <cstdlib>
#include <iostream>
#include <time.h>
#include <windows.h>
 
using namespace std;
 
 
char *Timer()
{
 
    time_t     now;
    struct tm  *ts;
    char *buf;
    now = time(0);
    ts = localtime(&now);
 
buf = new char [7];
 
    strftime(buf,  6, "%H:%M", ts);
 
return buf;
 
}
 
 
 
int main(int argc, char *argv[])
{
 
for(;;){
 
    cout<<Timer();
 
 Sleep(100);
 
 system("cls");
    
}
    
    system("PAUSE");
    return EXIT_SUCCESS;
}
1
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
32833 / 21170 / 8148
Регистрация: 22.10.2011
Сообщений: 36,430
Записей в блоге: 8
25.06.2013, 13:26 11
@Anforcer, на сообщения компилятора смотреть не пробовал?
warning: function returns address of local variable
, говорит же он всё, что нужно. Вышел ты из функции Timer(), локальная переменная исчезла. Опиши ее как static, хотя бы, если уж не хочешь выделять память в куче...
1
25.06.2013, 13:26
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
25.06.2013, 13:26
Помогаю со студенческими работами здесь

Как достать значения из DataRow
Задача такая : - есть база данных .mdb, написать программу в которой по нажатию кнопки мы...

Как достать значения из массива?
Доброго времени суток. У меня в переменной есть некий массив. Каждый раз у него разное значение. В...

Как достать и использовать значения из таблицы в qtablewidget
В программе для построения диаграмм значения введенные в таблицу нужно потом использовать для...

Как из ListBox-а достать значения всех столбцов строки?
Поможете? А то только значение первого столбца выделенной строки с помощью Text достается и все....

Как достать и передать в другой метод значения нескольких текстовых полей по нажатию кнопки?
Привет всем! Владеющие языком, прошу принять новичка в свои ряды, ну и... помочь чуток. Не могу...

array char* to char* (значения массива указателей в один указатель)
Как сложить(или вывести в формате char*) все значения массива указателей(char *) воедино, то есть...


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

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Опции темы

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