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

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

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

Как правильно вернуть wchar_t из функции - C++

16.09.2015, 08:17. Просмотров 306. Ответов 8
Метки нет (Все метки)

Я написал функцию, она формирует строку wchar_t вида "16-9-2015-10-12-51.txt" (день-месяц-год-час-минута-секунду.тхт), далее с помщью этой строки, я создавал текстовый файл, в котором в будущем планируется логфайл программы. Я решил вынести код получения времени в отдельную функцию (т.к. время мне так же понадобится как временная метка при записи каждого события в лог. В процессе отделения кода в другую функцию, возникли проблемы с получением значения из этой функции. Подскажите как сделать
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
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
wchar_t Debug::GetTime_v1() {
    //Изнаем текущее время, позже оно будет подставляться в имя лог файла
    struct tm local_t; //Создаем структуру local_t
    time_t t;// тип time_t - это целое число (означающее количество секунд, прошедших с 1 января 1970 года)
    time(&t); //& - операция взятия адреса. Тут мы берем указатель адреса переменной t
    // * - операция разыменовывания. Возвращает тот объект на который указывает указатель 
    /*!
    int x;
    int *y = &x; // От любой переменной можно взять адрес при помощи операции взятия адреса "&". Эта операция возвращает указатель
    int z = *y; // Указатель можно разыменовать при помощи операции разыменовывания "*". Это операция возвращает тот объект, на который указывает указатель
    [url]http://habrahabr.ru/post/251091/[/url]
    !*/
    localtime_s(&local_t, &t);
    dateday = local_t.tm_mday;
    datemon = local_t.tm_mon+1;
    dateyear = local_t.tm_year+1900;
 
    timehour = local_t.tm_hour;
    timemin = local_t.tm_min;
    timesec = local_t.tm_sec;
    //Формируем текстовую строку, чтобы на выходе получить имя текстового файла с временем в названии
    wchar_t testwch[256];
    wchar_t temp[128];
    int test = dateday;
    swprintf_s(testwch, L"%d", test);
        wcscat_s(testwch, L"-");
            wprintf(L"%s\n", testwch);
    test = datemon;
    swprintf_s(temp, L"%d", test);
        wcscat_s(testwch, temp);
        wcscat_s(testwch, L"-");
            wprintf(L"%s\n", testwch);
    test = dateyear;
    swprintf_s(temp, L"%d", test);
        wcscat_s(testwch, temp);
        wcscat_s(testwch, L"-");
            wprintf(L"%s\n", testwch);
    test = timehour;
    swprintf_s(temp, L"%d", test);
        wcscat_s(testwch, temp);
        wcscat_s(testwch, L"-");
            wprintf(L"%s\n", testwch);
    test = timemin;
    swprintf_s(temp, L"%d", test);
        wcscat_s(testwch, temp);
        wcscat_s(testwch, L"-");
            wprintf(L"%s\n", testwch);
    test = timesec;
    swprintf_s(temp, L"%d", test);
        wcscat_s(testwch, temp);
        //wcscat_s(testwch, L"-");
 
    wprintf(L"%s\n", testwch);
    wcscat_s(testwch, L".txt");
    //swprintf_s(testwch, L"%d", L".txt");
    wprintf(L"%s\n", testwch);
    cout << testwch << endl;
 
    return testwch; //Вот тут не получается вернуть полученную строку
}
0
Лучшие ответы (1)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
16.09.2015, 08:17
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Как правильно вернуть wchar_t из функции (C++):

Как правильно вернуть объект созданный в функции? - C++
Допустим у нас есть функция, которая динамически создает объект и должна его вернуть. К примеру, возьмем динамическое создание массива. ...

Почему const wchar_t* воспринимается как wchar_t* ? - C++
Здравствуйте. Я написал вот так: const wchar_t* dir = directory.c_str(); StartModule(dir); и такая ошибка появляется : ...

Как правильно вернуть значение? - C++
class Stack { private: myString *st; ... myString getSt() { return st; // не работает }

Как правильно вернуть итератор из метода - C++
Всем привет. Есть класс обертка над контейнером, который рулит некоторыми сущностями И понадобилось получать итераторы на эти сущности -...

Как правильно вписать функцию в h-файл и правильно её отразить в основной функции? - C++
Создать внешнюю библиотеку, в которой написана функция вывода символьного массива обратном порядке. Подключить данную библиотеку к ...

Функции, как вернуть значение? - C++
Нужно вернуть значение sum и min и вывести их main.cpp Но компилятор пишет, что: &quot;Ошибка : использована неинициализированная локальная...

8
zss
Модератор
Эксперт С++
6537 / 6099 / 2009
Регистрация: 18.12.2011
Сообщений: 15,870
Завершенные тесты: 1
16.09.2015, 08:26 #2
Лучший ответ Сообщение было отмечено автором темы, экспертом или модератором как ответ
C++
1
2
3
4
5
wchar_t* Debug::GetTime_v1() {
...
wchar_t* testwch=new wchar_t[256];
...
}
Только не забудьте удалить строку в вызывающей программе
C++
1
2
3
4
 Debug obj;
wchar_t* res=obj.GetTime_v1();
...
delete[] res;
1
noeine
0 / 0 / 0
Регистрация: 31.07.2013
Сообщений: 45
16.09.2015, 08:33  [ТС] #3
+ я там получается каждый раз приращиваю к своей финальной строке, значение сначала дня, потом месяца, ..., потом секунды, может можно сделать это как-то более компактно?

Добавлено через 6 минут
zss, когда я подставил ваш код, функции swprintf_s и wcscat_s начали писать что "отсутствуют экземпляры перегруженная функция "
0
zss
Модератор
Эксперт С++
6537 / 6099 / 2009
Регистрация: 18.12.2011
Сообщений: 15,870
Завершенные тесты: 1
16.09.2015, 08:35 #4
Можно одним вызовом
C++
1
swprintf_s(testwch, L"%d/%d/%d\n%d:%d:%d\n", dateday,datemonth,dateyear,timehour,timemin,timesec);
Добавлено через 1 минуту
В объявлении тоже надо поменять тип возвращаемого значения на wchar_t*
1
Kerry_Jr
Модератор
Эксперт PHP
2206 / 2002 / 701
Регистрация: 14.05.2014
Сообщений: 5,867
Записей в блоге: 1
Завершенные тесты: 5
16.09.2015, 08:37 #5
Цитата Сообщение от noeine Посмотреть сообщение
C++
1
cout << testwch << endl;
И прокатывает?
C++
1
wcout << testwch << endl;
0
noeine
0 / 0 / 0
Регистрация: 31.07.2013
Сообщений: 45
16.09.2015, 08:39  [ТС] #6
На строку
C++
1
swprintf_s(testwch, L"%d/%d/%d\n%d:%d:%d\n", dateday,datemon,dateyear,timehour,timemin,timesec);
в выходных данных пишет:
error C2664: int swprintf_s(wchar_t *,size_t,const wchar_t *,...): невозможно преобразовать параметр 2 из "const wchar_t [19]" в "size_t"

Добавлено через 1 минуту
Цитата Сообщение от Kerry_Jr Посмотреть сообщение
И прокатывает?
ну я выводил с помощью
C++
1
wprintf(L"%s\n", testwch);
а на cout компилятор просто не жаловался
0
zss
Модератор
Эксперт С++
6537 / 6099 / 2009
Регистрация: 18.12.2011
Сообщений: 15,870
Завершенные тесты: 1
16.09.2015, 08:39 #7
C++
1
swprintf_s(testwch, 256,L"%d/%d/%d\n%d:%d:%d\n", dateday,datemon,dateyear,timehour,timemin,timesec);
1
zss
Модератор
Эксперт С++
6537 / 6099 / 2009
Регистрация: 18.12.2011
Сообщений: 15,870
Завершенные тесты: 1
16.09.2015, 08:43 #8
Kerry_Jr, Обычно дату задают в виде дд/мм/гггг
а время чч:мм:сс
1
noeine
0 / 0 / 0
Регистрация: 31.07.2013
Сообщений: 45
16.09.2015, 08:44  [ТС] #9
Спасибо! Смог получить текущее время из другой функции.
0
16.09.2015, 08:44
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
16.09.2015, 08:44
Привет! Вот еще темы с ответами:

Как вернуть значение функции в С++ - C++
Помогите с задачей

Как вернуть массив из функции? - C++
int SumElementovStolbca(int M, int mas, int N) { int sum = 0; for (int i = 0; i&lt;N; i++) { for (int j = 0; j&lt;N; j++) {...

Как вернуть массив из функции? - C++
у меня есть две функции: Одна должна возвращать три числа, а вторая двумерный массив 10Х10; Как это провернуть?

Как вернуть значение функции - C++
#include &quot;stdafx.h&quot; #include &lt;iostream&gt; struct list{ float data; list *next; }; void my(list *p) {


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

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

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