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

Классы / Структуры и русский язык - C++

Восстановить пароль Регистрация
 
IPavel
9 / 9 / 0
Регистрация: 14.01.2013
Сообщений: 102
19.01.2013, 18:42     Классы / Структуры и русский язык #1
Вобщем у меня такой баг вылазиет незнаю как побороть...
Подскажите в чём грабли, и как решить.
Если создаю массив обьектов то начиная со второго обьекта в класс / структуру пишется ерунда.
У первого обьекта всё вроде норм, во втором в некоторых переменных нормально в некоторых смешиваются строки...
Вот например .
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
#include <iostream>
#include <cstring>
 
using namespace std;
 
class ClassCheloveki
{
    private:
    char pamat1[64];
    char pamat2[64];
    char pamat3[64];
    char pamat4[64];
    char pamat5[64];
    public:
    void MetodZabivau(void);
    void MetodAnekdot(void);
    void MetodZapominau(char *, char *, char *, char *, char *);
    };
 
    void ClassCheloveki::MetodZabivau(void)
    {
    for (int i2=0; i2<=64;i2++)
        { pamat1[i2] =* "";
        pamat2[i2] =* "";
        pamat3[i2] =* "";
        pamat4[i2] =* "";
        pamat5[i2] =* "";
    }
    return;
    }
 
void ClassCheloveki::MetodAnekdot (void)
{
    cout << pamat1 << endl;
    cout << pamat2 << endl;
    cout << pamat3 <<endl;
    cout << pamat4 << endl;
    cout << pamat5 << endl;
    return;
    }
 
    void ClassCheloveki::MetodZapominau(char *st1, char *st2, char *st3, char *st4, char *st5)
{
    strcpy (pamat1, st1);
    strcpy (pamat2, st2);
    strcpy (pamat3, st3);
    strcpy (pamat4, st4);
    strcpy (pamat5, st5);
    }
 
        ClassCheloveki ObjectRasskazchik[2];
 
int main()
{
    ObjectRasskazchik[0].MetodZabivau();
    ObjectRasskazchik[1].MetodZabivau();
    ObjectRasskazchik[0].MetodZapominau("Саша любит Мамбу!", "Петя любит Мамбу!", "И Сережа тоже!", "Мамбу любят все!", " - А Мамбу, вас всех ненавидит...");
    ObjectRasskazchik[1].MetodZapominau("Американские программисты никак не могли понять", "Почему их русские колеги", "Когда зависает Windows", "Всё время говорят: ", " - Вашу кролик написал! ");
    ObjectRasskazchik[0].MetodAnekdot();
    ObjectRasskazchik[1].MetodAnekdot();
    return 0;
    }
Получаю.
ipavel@raspberry:~/cpp_progs$ ./anekdot2
Саша любит Мамбу!
Петя любит Мамбу!
И Сережа тоже!
Мамбу любят все!
- А Мамбу, вас всех ненавидит...
Американские программисты никак нѐࠐߑȐ֐ݑàих русские колеги
Почему их русские колеги
Когда зависает Windows
Всё время говорят:
- Вашу кролик написал!
ipavel@raspberry:~/cpp_progs$
Помогите плз!!!
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
19.01.2013, 18:42     Классы / Структуры и русский язык
Посмотрите здесь:

C++ Русский Язык!!!
Русский язык в C++ C++
русский язык C++
Русский язык C++
C++ русский язык
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
0xv
19.01.2013, 19:12
  #2

Не по теме:

Не знаю, у меня всё нормально работает.
Но тут ты выходишь за пределы массива (не надо включать 64, просто до 64 )

Цитата Сообщение от IPavel Посмотреть сообщение
for (int i2=0; i2<=64;i2++)

MrGluck
Ворчун
Эксперт С++
 Аватар для MrGluck
4920 / 2663 / 243
Регистрация: 29.11.2010
Сообщений: 7,412
19.01.2013, 19:22     Классы / Структуры и русский язык #3
После смены количества итераций цикла до 64 выводит корректно.
Небольшой совет:
C++
1
void MetodZapominau(const char *, const char *, const char *, const char *, const char *);
И транслит не ок, а массивы можно было в двумерный собрать (хотя std::string гораздо лучше), у вас вот, например, грозиться впихуть невпихуемое в методе MetodZapominau (если аргумент будет иметь размер больше 64).
IPavel
9 / 9 / 0
Регистрация: 14.01.2013
Сообщений: 102
19.01.2013, 19:24  [ТС]     Классы / Структуры и русский язык #4
Цитата Сообщение от 0xv Посмотреть сообщение

Не по теме:

Не знаю, у меня всё нормально работает.
Но тут ты выходишь за пределы массива (не надо включать 64, просто до 64 )

Спасибо учту!
Но этот баг точно есть...
Проверял и на debian и на ubuntu 12.04...
Причём в разных программах...
Собственно когда писал программу и наталкнулся...
И начил проверять на тестовых программах.
В данном примере смешана одна строка из первой переменной...
Если бы создал третий обьект в масиве обьектов то там тоже было бы смешана строка в первой переменной...
Не пойму где грабли...
Если не массив обьектов а один обьект то как и в примере у первого обьекта всё норм...
IPavel
9 / 9 / 0
Регистрация: 14.01.2013
Сообщений: 102
19.01.2013, 19:32  [ТС]     Классы / Структуры и русский язык #5
Цитата Сообщение от MrGluck Посмотреть сообщение
После смены количества итераций цикла до 64 выводит корректно.
Небольшой совет:
C++
1
void MetodZapominau(const char *, const char *, const char *, const char *, const char *);
И транслит не ок, а массивы можно было в двумерный собрать (хотя std::string гораздо лучше), у вас вот, например, грозиться впихуть невпихуемое в методе MetodZapominau (если аргумент будет иметь размер больше 64).
Спасибо, сейчас итерацию поправлю и попробую!
про const - да надо бы себя приучить, спасибо!
Про string - согласен надо бы разобраться с ним наконец...
А вот про "транслит" не понял....
Сорри туплю чего-то...
MrGluck
Ворчун
Эксперт С++
 Аватар для MrGluck
4920 / 2663 / 243
Регистрация: 29.11.2010
Сообщений: 7,412
19.01.2013, 19:38     Классы / Структуры и русский язык #6
IPavel, MetodZapominau -> memorize (methodMemorize)
ObjectRasskazchik -> narrator (objectNarrator)
IPavel
9 / 9 / 0
Регистрация: 14.01.2013
Сообщений: 102
19.01.2013, 19:51  [ТС]     Классы / Структуры и русский язык #7
Цитата Сообщение от MrGluck Посмотреть сообщение
IPavel, MetodZapominau -> memorize (methodMemorize)
ObjectRasskazchik -> narrator (objectNarrator)
Понял... )))
Туплю чего-то...
Да это вобще я так для хохмы такие имена дал...
Ну собственно по проблеме...
Исправил итерацию так:
for (int i2=0; i2<64;i2++)
Поправил запоминалку.
void MetodZapominau(const char *, const char *, const char *, const char *, const char *);
и сам метод
void ClassCheloveki::MetodZapominau(const char *st1, const char *st2, const char *st3, const char *st4, const char *st5)
Предупреждения ушли...
А проблема осталась!!!
Причём вывод точно такой же...
Только в этой строке и только первая переменная.

Американские программисты никак нѐࠐߑȐ֐ݑàих русские колеги

Всю голову сломал.
MrGluck
Ворчун
Эксперт С++
 Аватар для MrGluck
4920 / 2663 / 243
Регистрация: 29.11.2010
Сообщений: 7,412
19.01.2013, 20:00     Классы / Структуры и русский язык #8
IPavel, попробуйте вообще убрать метод Zabivayu
IPavel
9 / 9 / 0
Регистрация: 14.01.2013
Сообщений: 102
19.01.2013, 20:26  [ТС]     Классы / Структуры и русский язык #9
Цитата Сообщение от MrGluck Посмотреть сообщение
IPavel, попробуйте вообще убрать метод Zabivayu
Убрал, результат тот же...
Может компилятор где глючит...
Т.к. всё время одни и те же символы и в одном и том же месте...
сейчас ещё раз на бубунте попробую...
Вобще компилю в debian в g++ версию компилятора не помню на вскидку...

Добавлено через 14 минут
p.s. Откомпилил в бубунте.
Тоже самое, как под копирку...

p.p.s notepad++ по умолчанию ставит кодировку "utf-8 без Бом"
Может просто в utf-8 кодировать???
Читал про "бом" как я понял тут нет двух байт начальных которые показывают что это документ windos - utf-8.
MrGluck
Ворчун
Эксперт С++
 Аватар для MrGluck
4920 / 2663 / 243
Регистрация: 29.11.2010
Сообщений: 7,412
19.01.2013, 20:33     Классы / Структуры и русский язык #10
в редакторе какая кодировка стоит?
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
19.01.2013, 20:44     Классы / Структуры и русский язык
Еще ссылки по теме:

String и русский язык C++
C++ Русский язык
Русский язык C++

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

Или воспользуйтесь поиском по форуму:
IPavel
9 / 9 / 0
Регистрация: 14.01.2013
Сообщений: 102
19.01.2013, 20:44  [ТС]     Классы / Структуры и русский язык #11
Цитата Сообщение от MrGluck Посмотреть сообщение
в редакторе какая кодировка стоит?
Я написал же... utf-8 без бом.
А вобще разнице никакой...
Сейчас пробывал просто utf-8 тоже самое....
И в том же месте...
на машинах где компилю есесно utf-8.
Вот кто бы попробывал этот код на бубуннте у себя скомпилить и посмотреть что получилось бы...
Если норм, тогда было бы нужно винить или windows или notepad++ ...
Потому как я пишу на винде в нотпаде и по ssh компилю на серваке...
Yandex
Объявления
19.01.2013, 20:44     Классы / Структуры и русский язык
Ответ Создать тему
Опции темы

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