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

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

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

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

11.05.2011, 22:20. Просмотров 653. Ответов 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",
};
В компиляторе выдает вместо русского слова ерунду. Как можно исправить? Спасибо!
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
11.05.2011, 22:20
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Функция с CharToOem не возвращает слово через return (C++):

Функция, которая возвращает слово в строке, которое короче всех. - C++
Добрый день уважаемые программисты! Есть задание: Написать функцию, которая возвращает слово в строке, которое короче всех. Заголовок...

Функция CharToOem - C++
Объясните пожалуйста, в чем тут ошибка? #include <windows.h> #include <stdio.h> #include <conio.h> int main() { char...

Функция, которая возвращает количество неотрицательных элементов массива. (через указатели) - C++
Написать функцию, которая возвращает количество неотрицательных элементов массива. Массив передается в функцию в качестве параметра через...

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

Return возвращает условие. Для чего? - C++
Не перестаю удивляться языку с++... Встретил сегодня такую строчку в программе if(Fun::fff(argv)) { cout << "Correct " << argv;} ...

Что значит слово return? - C++
что значит слово return?

4
агерон
273 / 274 / 33
Регистрация: 12.10.2009
Сообщений: 1,079
11.05.2011, 22:36 #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;
}
1
gooseim
Эксперт С++
510 / 414 / 37
Регистрация: 23.09.2010
Сообщений: 1,159
11.05.2011, 22:40 #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;
}
Но такой подход как выделение памяти в одном месте, а освобождение в другом не очень красив.
1
kdteam
0 / 0 / 0
Регистрация: 19.03.2010
Сообщений: 6
11.05.2011, 22:48  [ТС] #4
Спасибо большое! Ф-ия gooseim работает
0
агерон
273 / 274 / 33
Регистрация: 12.10.2009
Сообщений: 1,079
12.05.2011, 03:39 #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; так что тут чистый синтаксичиский сахар который должен применяться по обстоятельствам
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
12.05.2011, 03:39
Привет! Вот еще темы с ответами:

Слово return в простом примере с наследованием классов - C++
Добрый день! Ниже приведён код. Подскажите, пожалуйста, для чего тут return . Почему нельзя просто вставить ++ count (или --count)?...

Функция Return. Несколько аргументов - C++
Можно вернуть неслоко аргументов в функции return ? void progr1(int A, int B, int N ){ int X; int Y; int Z; Z=B; Y=A; ...

функция команды return sqrt - C++
//Подключение заголовочных файлов #include <iostream> //ввод вывод #include <math.h> //матем. функции //Функция вычисления...

Что означает запись в скобках и что возвращает return - C++
Всем привет! Начал читать книгу BecomeAnXcoder и тут появился вопрос. В пример приведен такой код circleArea(float theRadius) //(1) ...


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

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

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