| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > C/C++: Для новичков > itoa() |
| Автор: yngwie19 28.4.2009, 09:33 | ||
здравствуйте почему при использовании функции itoa() у меня после преобразованного числа идут непонятные символы?
![]() или мне нужно обнулять массив szText ? |
| Автор: zim22 28.4.2009, 09:37 | ||
попробуйте обнулить. разве это так сложно?
|
| Автор: yngwie19 28.4.2009, 09:39 |
| zim22, мне казалось что за меня это должна делать itoa() Добавлено через 4 минуты и 22 секунды а точему если nNumber сделать равным 55, то даже при обнуленном массиве вылезают иероглифы? |
| Автор: azesmcar 28.4.2009, 09:59 | ||
| yngwie19 Вот так что выводит?
|
| Автор: Ln78 28.4.2009, 10:00 |
| yngwie19, язык и компилятор какие? Возможно, MessageBox вызывается MessageBoxW - уникодовская, а тип char а не wchar. С++ должен ругаться, а в C может и пройти, выдавая такую ерунду. Круто, обнулить непонятно где находящуюся ячейку памяти, конечно, несложно. Как говорится, дурное дело нехитрое. |
| Автор: zim22 28.4.2009, 10:04 | ||||||
Вы способны заметить разницу между обнулением единичной ячейки памяти по индексу 17
и инициализацию всех элементов массива szText нулями?
|
| Автор: azesmcar 28.4.2009, 10:07 |
| удалено (неверно понял написанное) |
| Автор: mrbrooks 28.4.2009, 10:09 | ||
почему это не известно где? ведь задан массив из 17 символов? |
| Автор: Ln78 28.4.2009, 10:09 | ||
zim22, пардон. Обычно способен, сейчас не заметил. Вероятно, предлагаемый способ "лечения" смутил, подумал, что обнуление предлагается делать уже после вызова функции. |
| Автор: mrbrooks 28.4.2009, 10:10 |
| другое дело что обнулить есть смысл через memset |
| Автор: Acer 28.4.2009, 10:11 |
| yngwie19, воспользуйтесь функцией MessageBoxA, может, как написал Ln78, по умолчанию вызывается MessageBoxW |
| Автор: yngwie19 28.4.2009, 10:20 |
| Acer, MessageBoxA помогло всем спасибо! |
| Автор: mrbrooks 28.4.2009, 10:22 |
Генерилась бы ошибка мол не могу преобразовать из char[17] в LPCWSTR. Кстати она и так вызывается. Просто при MessageBoxA происходит преобразование строк из анси в юникод и вызывается MessageBoxW. |
| Автор: azesmcar 28.4.2009, 10:33 |
| mrbrooks В си наверняка выдаст warning. Просто люди не обращают внимание на предупреждения. |
| Автор: zim22 28.4.2009, 11:00 | ||||
сначала я хотел с вами не согласиться, т.к. думал, что ассемблерный код, сгенерированный для
гораздо меньше, чем вызов memset Но я был удивлён, когда посмотрел дизассемблерный листинг: char buf[256] = {0};
Т.е. memset всё-равно вызывается |