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

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

Восстановить пароль Регистрация
 
noeine
0 / 0 / 0
Регистрация: 31.07.2013
Сообщений: 45
16.09.2015, 08:17     Как правильно вернуть wchar_t из функции #1
Я написал функцию, она формирует строку 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; //Вот тут не получается вернуть полученную строку
}
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
16.09.2015, 08:17     Как правильно вернуть wchar_t из функции
Посмотрите здесь:

Как вернуть значение функции C++
как правильно вернуть значение? C++
Как вернуть массив из функции? C++
Как вернуть string из функции? C++
C++ Как вернуть значение функции в С++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
zss
Модератор
Эксперт С++
 Аватар для zss
5951 / 5556 / 1787
Регистрация: 18.12.2011
Сообщений: 14,200
Завершенные тесты: 1
16.09.2015, 08:26     Как правильно вернуть wchar_t из функции #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;
noeine
0 / 0 / 0
Регистрация: 31.07.2013
Сообщений: 45
16.09.2015, 08:33  [ТС]     Как правильно вернуть wchar_t из функции #3
+ я там получается каждый раз приращиваю к своей финальной строке, значение сначала дня, потом месяца, ..., потом секунды, может можно сделать это как-то более компактно?

Добавлено через 6 минут
zss, когда я подставил ваш код, функции swprintf_s и wcscat_s начали писать что "отсутствуют экземпляры перегруженная функция "
zss
Модератор
Эксперт С++
 Аватар для zss
5951 / 5556 / 1787
Регистрация: 18.12.2011
Сообщений: 14,200
Завершенные тесты: 1
16.09.2015, 08:35     Как правильно вернуть wchar_t из функции #4
Можно одним вызовом
C++
1
swprintf_s(testwch, L"%d/%d/%d\n%d:%d:%d\n", dateday,datemonth,dateyear,timehour,timemin,timesec);
Добавлено через 1 минуту
В объявлении тоже надо поменять тип возвращаемого значения на wchar_t*
Kerry_Jr
Модератор
 Аватар для Kerry_Jr
1865 / 1661 / 578
Регистрация: 14.05.2014
Сообщений: 4,771
Записей в блоге: 1
Завершенные тесты: 5
16.09.2015, 08:37     Как правильно вернуть wchar_t из функции #5
Цитата Сообщение от noeine Посмотреть сообщение
C++
1
cout << testwch << endl;
И прокатывает?
C++
1
wcout << testwch << endl;
noeine
0 / 0 / 0
Регистрация: 31.07.2013
Сообщений: 45
16.09.2015, 08:39  [ТС]     Как правильно вернуть wchar_t из функции #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 компилятор просто не жаловался
zss
Модератор
Эксперт С++
 Аватар для zss
5951 / 5556 / 1787
Регистрация: 18.12.2011
Сообщений: 14,200
Завершенные тесты: 1
16.09.2015, 08:39     Как правильно вернуть wchar_t из функции #7
C++
1
swprintf_s(testwch, 256,L"%d/%d/%d\n%d:%d:%d\n", dateday,datemon,dateyear,timehour,timemin,timesec);
zss
Модератор
Эксперт С++
 Аватар для zss
5951 / 5556 / 1787
Регистрация: 18.12.2011
Сообщений: 14,200
Завершенные тесты: 1
16.09.2015, 08:43     Как правильно вернуть wchar_t из функции #8
Kerry_Jr, Обычно дату задают в виде дд/мм/гггг
а время чч:мм:сс
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
16.09.2015, 08:44     Как правильно вернуть wchar_t из функции
Еще ссылки по теме:

C++ Как вернуть массив из функции?
C++ Функции, как вернуть значение?
C++ Почему const wchar_t* воспринимается как wchar_t* ?

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

Или воспользуйтесь поиском по форуму:
noeine
0 / 0 / 0
Регистрация: 31.07.2013
Сообщений: 45
16.09.2015, 08:44  [ТС]     Как правильно вернуть wchar_t из функции #9
Спасибо! Смог получить текущее время из другой функции.
Yandex
Объявления
16.09.2015, 08:44     Как правильно вернуть wchar_t из функции
Ответ Создать тему
Опции темы

Текущее время: 18:21. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru