0 / 0 / 0
Регистрация: 19.03.2010
Сообщений: 6
1

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

11.05.2011, 22:20. Показов 935. Ответов 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
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
11.05.2011, 22:20
Ответы с готовыми решениями:

Функция CharToOem
Объясните пожалуйста, в чем тут ошибка? #include <windows.h> #include <stdio.h> #include...

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

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

Функция которая возвращает первое слово строки
напишите функцию которая возвращает первое слово переданной ей символьной строки

4
447 / 300 / 65
Регистрация: 12.10.2009
Сообщений: 1,162
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
Эксперт С++
516 / 420 / 92
Регистрация: 23.09.2010
Сообщений: 1,165
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
0 / 0 / 0
Регистрация: 19.03.2010
Сообщений: 6
11.05.2011, 22:48  [ТС] 4
Спасибо большое! Ф-ия gooseim работает
0
447 / 300 / 65
Регистрация: 12.10.2009
Сообщений: 1,162
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
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
12.05.2011, 03:39
Помогаю со студенческими работами здесь

Return возвращает 0
Знатно туплю. Почему печатается 0, а не 6 ? public class J001 { public static void...

Что делает return? Ну возвращает ,и?
Разве с помощью global , то же самое сделать нельзя? Пример: def add(x, y): global z ...

Что делает return? Ну возвращает ,и?
Я не просто спрашиваю не прочитав инфорацию,я уже с сотню статей прочитал и возможно я тупой , но...

Что возвращает оператор return?
довольно часто в книгах опускают оператор return, просто пишут,что он возвращает значение. а что...


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2022, CyberForum.ru