|
|
|
Консоль С++, устранить ошибку
|
|||
|---|---|---|---|
|
#18+
Функция переводит каракули ,в консоле, на русский язык, все компилиться тока когда запускаеться вылетает AV, подскажите где ошибка Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.11.2007, 14:41:14 |
|
||
|
Консоль С++, устранить ошибку
|
|||
|---|---|---|---|
|
#18+
Исходник это функции написан на Делфи Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.11.2007, 14:52:17 |
|
||
|
Консоль С++, устранить ошибку
|
|||
|---|---|---|---|
|
#18+
Orb* wrote: > Функция переводит каракули ,в консоле, на русский язык, все компилиться > тока когда запускаеться вылетает AV, подскажите где ошибка > .... > switch (msg ) > { > case 'А..п':msg= char(AnsiString(msg)-*64*); Тут две ошибки - во первых та case-ов в C не бывает. во вторых - забыл поставить break. со switch придется делать так : case 'А': case 'Б': case 'В': ... и так далее ... case 'п': msg= char(AnsiString(msg)-64); break; case 'р': case 'с': case 'т': ... и так далее ... case 'я': msg= char(AnsiString(msg)-64); break; или без него: if (msg >= 'А' && msg <= 'п') msg= char(AnsiString(msg)-64); else if (msg >= 'р' && msg <= 'я') msg= char(AnsiString(msg)-16); Posted via ActualForum NNTP Server 1.4 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.11.2007, 15:07:37 |
|
||
|
Консоль С++, устранить ошибку
|
|||
|---|---|---|---|
|
#18+
Ошибка здесь: авторfor (i=1; msg.Length();i++) Надо: Код: plaintext ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.11.2007, 15:16:51 |
|
||
|
Консоль С++, устранить ошибку
|
|||
|---|---|---|---|
|
#18+
AndrewP_Ошибка здесь: авторfor (i=1; msg.Length();i++) Надо: Код: plaintext выражения равносильны, Вообщето ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.11.2007, 15:28:04 |
|
||
|
Консоль С++, устранить ошибку
|
|||
|---|---|---|---|
|
#18+
teras Orb* wrote: > Функция переводит каракули ,в консоле, на русский язык, все компилиться > тока когда запускаеться вылетает AV, подскажите где ошибка > .... > switch (msg ) > { > case 'А..п':msg= char(AnsiString(msg)-*64*); Тут две ошибки - во первых та case-ов в C не бывает. во вторых - забыл поставить break. со switch придется делать так : case 'А': case 'Б': case 'В': ... и так далее ... case 'п': msg= char(AnsiString(msg)-64); break; case 'р': case 'с': case 'т': ... и так далее ... case 'я': msg= char(AnsiString(msg)-64); break; или без него: if (msg >= 'А' && msg <= 'п') msg= char(AnsiString(msg)-64); else if (msg >= 'р' && msg <= 'я') msg= char(AnsiString(msg)-16); так то оно так, да вот AV никуда не исчезла (((( ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.11.2007, 15:37:59 |
|
||
|
Консоль С++, устранить ошибку
|
|||
|---|---|---|---|
|
#18+
On Mon, 05 Nov 2007 15:28:04 +0300, Orb* <nospam@sql.ru> wrote: > выражения равносильны, Вообщето Кто вам сказал? for (x; y; z) Выражение y вычисляется перед каждым витком цикла, и если возвращает истину, цикл продолжается. GetLength() на каждой итерации вернет не-ноль, что трактуется как true, и цикл никогда не закончится. -- Здесь у нас туманы и дожди, здесь у нас холодные рассветы, Здесь на неизведанном пути ждут замысловатые сюжеты! Posted via ActualForum NNTP Server 1.4 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.11.2007, 17:15:49 |
|
||
|
Консоль С++, устранить ошибку
|
|||
|---|---|---|---|
|
#18+
Orb* wrote: > AndrewP_ > Ошибка здесь: > автор > for (i=1; msg.Length();i++) > > Надо: > > for (i=1; i<=msg.Length();i++) > > выражения равносильны, Вообщето Нет, не равносильны - в первом цикле отсутствует проверка условия окончания, а значит он никогда не заканчивается (если строка не пуста), обращаясь на чтение/запись за пределами строки - отсюда и AV. Posted via ActualForum NNTP Server 1.4 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.11.2007, 18:25:28 |
|
||
|
Консоль С++, устранить ошибку
|
|||
|---|---|---|---|
|
#18+
Orb*Функция переводит каракули ,в консоле, на русский язык, все компилиться тока когда запускаеться вылетает AV, подскажите где ошибка Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. и что компилятор не ругается на такой Case? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.11.2007, 19:17:03 |
|
||
|
Консоль С++, устранить ошибку
|
|||
|---|---|---|---|
|
#18+
так отлично работает char* rus_code(char* msg) { int i; for(i=0; ( i < strlen(msg))&&( i < 255 );i++ ) { if( (msg >= 'А') && (msg <= 'п') ) { msg = msg - 64; } if( (msg >= 'р') && (msg <= 'я') ) { msg = msg - 16; } } return msg; } int main() { char str[255]; strcpy( str,"привет"); printf("%s", rus_code(str) ); return 0; } когда ты передаеш rus_code("привет") то под строку "привет" выделяется память в которую нельзя писать а при msg = msg - 16; идет попытка записи и вызывается исключение :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.11.2007, 19:37:04 |
|
||
|
|

start [/forum/topic.php?fid=57&msg=34917061&tid=2027863]: |
0ms |
get settings: |
7ms |
get forum list: |
14ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
195ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
51ms |
get tp. blocked users: |
1ms |
| others: | 200ms |
| total: | 485ms |

| 0 / 0 |
