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

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

Восстановить пароль Регистрация
 
kdteam
0 / 0 / 0
Регистрация: 19.03.2010
Сообщений: 6
11.05.2011, 22:20     Функция с CharToOem не возвращает слово через return #1
Здравствуйте!
У меня есть такая: ф-ия

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",
};
В компиляторе выдает вместо русского слова ерунду. Как можно исправить? Спасибо!
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
агерон
 Аватар для агерон
265 / 264 / 33
Регистрация: 12.10.2009
Сообщений: 1,030
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
Эксперт C++
500 / 404 / 35
Регистрация: 23.09.2010
Сообщений: 1,139
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 работает
агерон
 Аватар для агерон
265 / 264 / 33
Регистрация: 12.10.2009
Сообщений: 1,030
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
Ответ Создать тему
Опции темы

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