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

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

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

Функция с CharToOem не возвращает слово через return - C++

11.05.2011, 22:20. Просмотров 606. Ответов 4
Метки нет (Все метки)

Здравствуйте!
У меня есть такая: ф-ия

C++
1
2
3
4
5
6
char* rus3(char* c)
{
char buf[12];
    CharToOem(c,buf);
return buf;
}
Я ее вызываю в таком контексте:
C++
1
2
3
4
5
6
static const char* surname[] =
{
    rus3("Иванов"),
    "Petrov",
    "Sidorov",
};
В компиляторе выдает вместо русского слова ерунду. Как можно исправить? Спасибо!
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
11.05.2011, 22:20     Функция с CharToOem не возвращает слово через return
Посмотрите здесь:

Функция, которая возвращает количество неотрицательных элементов массива. (через указатели) C++
C++ Функция, которая возвращает слово в строке, которое короче всех.
Возврат char* через return C++
C++ Функция CharToOem
C++ Что значит слово return?
C++ Функция Return. Несколько аргументов
C++ Return возвращает условие. Для чего?
C++ Почему функция может не завершаться после выполнения return?
C++ Перегрузка функция отличающихся только return
C++ Слово return в простом примере с наследованием классов
Куда return возвращает результат из функции? C++
функция команды return sqrt C++

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
агерон
268 / 267 / 33
Регистрация: 12.10.2009
Сообщений: 1,054
11.05.2011, 22:36     Функция с CharToOem не возвращает слово через return #2
C++
1
2
3
4
5
6
7
8
9
10
11
12
char* rus3(char* c,int count)
{
    char *buf=new char[count];
        CharToOem(c,buf);
    return buf;
}
 
void main()
{
    char *result=rus3("Иванов",12);
    delete []result;
}
gooseim
Эксперт С++
508 / 412 / 37
Регистрация: 23.09.2010
Сообщений: 1,159
11.05.2011, 22:40     Функция с CharToOem не возвращает слово через return #3
kdteam, нельзя возвращать временный массив (buf). Он удалится после выхода из блока и на выходе будет мусор.

Добавлено через 2 минуты
агерон, можно проще:
C++
1
2
3
4
5
6
char* rus3(char* c)
{
        char *buf=new char[strlen(c)+1];
        CharToOem(c,buf);
        return buf;
}
Но такой подход как выделение памяти в одном месте, а освобождение в другом не очень красив.
kdteam
0 / 0 / 0
Регистрация: 19.03.2010
Сообщений: 6
11.05.2011, 22:48  [ТС]     Функция с CharToOem не возвращает слово через return #4
Спасибо большое! Ф-ия gooseim работает
агерон
268 / 267 / 33
Регистрация: 12.10.2009
Сообщений: 1,054
12.05.2011, 03:39     Функция с CharToOem не возвращает слово через return #5
Цитата Сообщение от gooseim Посмотреть сообщение
kdteam, нельзя возвращать временный массив (buf). Он удалится после выхода из блока и на выходе будет мусор.

Добавлено через 2 минуты
агерон, можно проще:
C++
1
2
3
4
5
6
char* rus3(char* c)
{
        char *buf=new char[strlen(c)+1];
        CharToOem(c,buf);
        return buf;
}
Но такой подход как выделение памяти в одном месте, а освобождение в другом не очень красив.
да я знаю что выделение памяти в 1 месте и освобождение в другом это источник потенциальных проблем но код
C
1
2
3
4
5
6
7
8
9
10
11
12
char* rus3(char* с, char *buf)
{
        CharToOem(c,buf);
        return buf;
}
 
void main()
{
 char *buf=new[strlen(c)+1];
 rus3(c,buf);
 delete []buf;
}
являеться ненужной обверткой над CharToOem; так что тут чистый синтаксичиский сахар который должен применяться по обстоятельствам
Yandex
Объявления
12.05.2011, 03:39     Функция с CharToOem не возвращает слово через return
Ответ Создать тему
Опции темы

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