Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.80/5: Рейтинг темы: голосов - 5, средняя оценка - 4.80
0 / 0 / 0
Регистрация: 19.03.2010
Сообщений: 6

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

11.05.2011, 22:20. Показов 1154. Ответов 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
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
11.05.2011, 22:20
Ответы с готовыми решениями:

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

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

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

4
 Аватар для агерон
447 / 300 / 65
Регистрация: 12.10.2009
Сообщений: 1,162
11.05.2011, 22:36
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 / 421 / 92
Регистрация: 23.09.2010
Сообщений: 1,165
11.05.2011, 22:40
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  [ТС]
Спасибо большое! Ф-ия gooseim работает
0
 Аватар для агерон
447 / 300 / 65
Регистрация: 12.10.2009
Сообщений: 1,162
12.05.2011, 03:39
Цитата Сообщение от 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
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
12.05.2011, 03:39
Помогаю со студенческими работами здесь

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

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Новые блоги и статьи
Использование SDL3-callbacks вместо функции main() на Android, Desktop и WebAssembly
8Observer8 24.01.2026
Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а привычная функция main(). . .
моя боль
iceja 24.01.2026
Выложила интерполяцию кубическими сплайнами www. iceja. net REST сервисы временно не работают, только через Web. Написала за 56 рабочих часов этот сайт с нуля. При помощи perplexity. ai PRO , при. . .
Модель сукцессии микоризы
anaschu 24.01.2026
Решили писать научную статью с неким РОманом
http://iceja.net/ математические сервисы
iceja 20.01.2026
Обновила свой сайт http:/ / iceja. net/ , приделала Fast Fourier Transform экстраполяцию сигналов. Однако предсказывает далеко не каждый сигнал (см ограничения http:/ / iceja. net/ fourier/ docs ). Также. . .
http://iceja.net/ сервер решения полиномов
iceja 18.01.2026
Выкатила http:/ / iceja. net/ сервер решения полиномов (находит действительные корни полиномов методом Штурма). На сайте документация по API, но скажу прямо VPS слабенький и 200 000 полиномов. . .
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ * Дана цепь(не выше 3-го порядка) постоянного тока с элементами R, L, C, k(ключ), U, E, J. Программа находит переходные токи и напряжения на элементах схемы классическим методом(1 и 2 з-ны. . .
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым. Но восстановить их можно так. Для этого понадобится консольная утилита. . .
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru