Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.82/11: Рейтинг темы: голосов - 11, средняя оценка - 4.82
2 / 2 / 1
Регистрация: 31.07.2013
Сообщений: 45

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

16.09.2015, 08:17. Показов 2217. Ответов 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)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
16.09.2015, 08:17
Ответы с готовыми решениями:

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

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

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

8
Модератор
Эксперт С++
 Аватар для zss
13773 / 10966 / 6491
Регистрация: 18.12.2011
Сообщений: 29,244
16.09.2015, 08:26
Лучший ответ Сообщение было отмечено zss как решение

Решение

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
2 / 2 / 1
Регистрация: 31.07.2013
Сообщений: 45
16.09.2015, 08:33  [ТС]
+ я там получается каждый раз приращиваю к своей финальной строке, значение сначала дня, потом месяца, ..., потом секунды, может можно сделать это как-то более компактно?

Добавлено через 6 минут
zss, когда я подставил ваш код, функции swprintf_s и wcscat_s начали писать что "отсутствуют экземпляры перегруженная функция "
0
Модератор
Эксперт С++
 Аватар для zss
13773 / 10966 / 6491
Регистрация: 18.12.2011
Сообщений: 29,244
16.09.2015, 08:35
Можно одним вызовом
C++
1
swprintf_s(testwch, L"%d/%d/%d\n%d:%d:%d\n", dateday,datemonth,dateyear,timehour,timemin,timesec);
Добавлено через 1 минуту
В объявлении тоже надо поменять тип возвращаемого значения на wchar_t*
1
Эксперт PHP
 Аватар для Kerry_Jr
3106 / 2591 / 1219
Регистрация: 14.05.2014
Сообщений: 7,236
Записей в блоге: 1
16.09.2015, 08:37
Цитата Сообщение от noeine Посмотреть сообщение
C++
1
cout << testwch << endl;
И прокатывает?
C++
1
wcout << testwch << endl;
0
2 / 2 / 1
Регистрация: 31.07.2013
Сообщений: 45
16.09.2015, 08:39  [ТС]
На строку
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
13773 / 10966 / 6491
Регистрация: 18.12.2011
Сообщений: 29,244
16.09.2015, 08:39
C++
1
swprintf_s(testwch, 256,L"%d/%d/%d\n%d:%d:%d\n", dateday,datemon,dateyear,timehour,timemin,timesec);
1
Модератор
Эксперт С++
 Аватар для zss
13773 / 10966 / 6491
Регистрация: 18.12.2011
Сообщений: 29,244
16.09.2015, 08:43
Kerry_Jr, Обычно дату задают в виде дд/мм/гггг
а время чч:мм:сс
1
2 / 2 / 1
Регистрация: 31.07.2013
Сообщений: 45
16.09.2015, 08:44  [ТС]
Спасибо! Смог получить текущее время из другой функции.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
16.09.2015, 08:44
Помогаю со студенческими работами здесь

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

Как правильно вернуть true внутри функции
Доброго времени суток! У меня возникла проблема при валидации данных отправляемых формой авторизации пользователя! Скрипт: var...

Как правильно вернуть из функции сформированную в ней строку?
Как правильно вернуть из функции сформированную в ней строку? Возвращать массив это- возвращать указатель на первый элемент. Но...

Как правильно вернуть исключение
Здравствуйте. Во всех книгах и статьях по данному вопросу пишут просто. Что-то типо такого: try{ 1/0; } catch(Exception e){...

Как правильно вернуть значения из метода?
Ребят, есть вот такой вот баян ниже. Для возврата нескольких значений, говорят нужно создавать объект. Если можете, объясните хотя бы по...


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

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Новые блоги и статьи
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Символьное дифференцирование
igorrr37 13.02.2026
/ * Программа принимает математическое выражение в виде строки и выдаёт его производную в виде строки и вычисляет значение производной при заданном х Логарифм записывается как: (x-2)log(x^2+2) -. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru