вопрос по потокам о перегрузке оператора <<
От: Ramzes14  
Дата: 15.12.04 09:11
Оценка:
Доброе время суток ALL !

очень надоело извращяться для написания в консоль русских букв
для этого написал такой код
ostream& operator << (ostream& s,char *c)
{
    char sBuf[1024];
  CharToOem(sMSG,sBuf);
  s<<c;    
  return s;
}
int main()
  {
    cout << "текст по русски";
        return 0;
    }

только в выделенной строке начинается безконечный цикл
как решить данную проблему незнаю если есть соображения
по данному поводу поделитесь плиз
... << RSDN@Home 1.1.4 @@subversion >>
Re: вопрос по потокам о перегрузке оператора <<
От: LaptevVV Россия  
Дата: 15.12.04 09:18
Оценка:
Здравствуйте, Ramzes14, Вы писали:

R> Доброе время суток ALL !


R>очень надоело извращяться для написания в консоль русских букв

R>для этого написал такой код
R>
R>ostream& operator << (ostream& s,char *c)
R>{
R>    char sBuf[1024];
R>  CharToOem(sMSG,sBuf);
R>  s<<c;    
R>  return s;
R>}
R>int main()
R>  {
R>    cout << "текст по русски";
R>        return 0;
R>    }
R>

R>только в выделенной строке начинается безконечный цикл
R>как решить данную проблему незнаю если есть соображения
R>по данному поводу поделитесь плиз
Сам еще не пробовал, но поищи-ка ты тут setlocale — вопрос русских букв много раз обсасывался.
Еще поищи кодовое слово imbue
Хочешь быть счастливым — будь им!
Без булдырабыз!!!
Re: вопрос по потокам о перегрузке оператора <<
От: korzhik Россия  
Дата: 15.12.04 09:38
Оценка:
Здравствуйте, Ramzes14, Вы писали:

R>очень надоело извращяться для написания в консоль русских букв

R>для этого написал такой код

R>только в выделенной строке начинается безконечный цикл

R>как решить данную проблему незнаю если есть соображения
R>по данному поводу поделитесь плиз

рекурсию можно убрать так:
struct char2Oem
{
    char const * const data_;
    explicit char2Oem(char const * const str) : data_(str) {}
};

std::ostream& operator << (std::ostream& s, const char2Oem& str)
{
    char sBuf[1024];
    CharToOem(str.data_,sBuf);
    s << sBuf;    
    return s;
}

int main()
{
    std::cout << char2Oem("текст по русски") << std::endl;
}


ну а по хорошему надо почитать про локали и сделать например как здесь
Автор: Serg Bormant
Дата: 05.09.03
Re: вопрос по потокам о перегрузке оператора <<
От: aset  
Дата: 15.12.04 09:54
Оценка: 2 (2) :)
Перегрузи оператор "<<=", он в iostream свободен
Re: вопрос по потокам о перегрузке оператора <<
От: Mr. None Россия http://mrnone.blogspot.com
Дата: 15.12.04 10:36
Оценка: 3 (1)
Здравствуйте, Ramzes14, Вы писали:

R>только в выделенной строке начинается безконечный цикл

R>как решить данную проблему незнаю если есть соображения
R>по данному поводу поделитесь плиз

Так:
#include <cstring>
ostream& operator << (ostream& s,char *c)
{
    char sBuf[1024];
    CharToOem(sMSG,sBuf);
    s.write(c, std::strlen(c));
    return s;
}
Компьютер сделает всё, что вы ему скажете, но это может сильно отличаться от того, что вы имели в виду.
Re[2]: вопрос по потокам о перегрузке оператора <<
От: Ramzes14  
Дата: 15.12.04 14:10
Оценка:
Здравствуйте, Mr. None, Вы писали:
огромное спасибо сработало
только я немного неправильно написал функцию
правильно и работоспособно так
#include <cstring>
ostream& operator << (ostream& s,char *c)
{
    char sBuf[1024];
    CharToOem(c,sBuf);
    s.write(sBuf, strlen(sBuf));
    return s;
}
... << RSDN@Home 1.1.4 @@subversion >>
Re[3]: вопрос по потокам о перегрузке оператора <<
От: Centaur Россия  
Дата: 15.12.04 16:32
Оценка: +1
Здравствуйте, Ramzes14, Вы писали:
R>правильно и работоспособно так
R>
R>#include <cstring>
R>ostream& operator << (ostream& s, /*1*/ char *c)
R>{
R>    char sBuf[/*2*/1024];
R>    CharToOem(c,sBuf); /*3*/
R>    s.write(sBuf, strlen(sBuf));
R>    return s;
R>}
R>


[1] Стиль: входную строку следовало бы пообещать не менять (const).
[2] Стиль: магическое число в коде.
[3] Безопасность: вот здесь произойдёт переполнение буфера, причём в наиболее опасном его варианте — переполнение буфера на стеке. Со всеми вытекающими последствиями: перезапись адреса возврата с последующим выполнением произвольного кода.
Re: вопрос по потокам о перегрузке оператора &lt;&lt;
От: Аноним  
Дата: 21.07.09 10:24
Оценка:
для этого написал такой код
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.