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

Тема из раздела "Непонятки в++" - C++

Восстановить пароль Регистрация
 
fredwriter
7 / 7 / 1
Регистрация: 17.10.2009
Сообщений: 269
28.05.2014, 02:24     Тема из раздела "Непонятки в++" #1
Здравствуй народ, у кого какие есть версии, почему так работает:
C++
1
2
char comp_Num[20];
WideCharToMultiByte(CP_ACP, 0, Num_Oper, -1, comp_Num, (int)strlen(comp_Num), NULL, NULL);
А так не работает:
C++
1
2
char comp_Num[20] = {0,};
WideCharToMultiByte(CP_ACP, 0, Num_Oper, -1, comp_Num, (int)strlen(comp_Num), NULL, NULL);
?
Не работает в том смысле, что во втором варианте в comp_Num пусто.
Лучшие ответы (1)
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
xtorne21st
28.05.2014, 02:26
  #2

Не по теме:

Тему из раздела "Непонятки в++" нужно перенести в "Непонятки в WinApi"

fredwriter
7 / 7 / 1
Регистрация: 17.10.2009
Сообщений: 269
28.05.2014, 02:29  [ТС]     Тема из раздела "Непонятки в++" #3
Цитата Сообщение от xtorne21st Посмотреть сообщение
Тему из раздела "Непонятки в++" нужно перенести в "Непонятки в WinApi"
Да, разделом наверное ошибся. Но массив же по с++.
Croessmah
Модератор
Эксперт С++
 Аватар для Croessmah
11822 / 6801 / 769
Регистрация: 27.09.2012
Сообщений: 16,869
Записей в блоге: 2
Завершенные тесты: 1
28.05.2014, 02:31     Тема из раздела "Непонятки в++" #4
Сообщение было отмечено автором темы, экспертом или модератором как ответ
Цитата Сообщение от fredwriter Посмотреть сообщение
почему так работает:
Массив не инициализирован же, значит strlen(comp_Num) будет читать пока не встретит 0 в памяти
Цитата Сообщение от fredwriter Посмотреть сообщение
А так не работает:
strlen(comp_Num) вернет 0, а значит функция не будет писать ничего в lpMultiByteStr, т.к. буфера недостаточно.

так же заходим на MSDN и читаем:
cbMultiByte
[in] Size, in bytes, of the buffer pointed to by the lpMultiByteStr parameter. If this value is zero, the function returns the number of bytes required for the buffer. (In this case, the lpMultiByteStr buffer is not used.)
fredwriter
7 / 7 / 1
Регистрация: 17.10.2009
Сообщений: 269
28.05.2014, 02:53  [ТС]     Тема из раздела "Непонятки в++" #5
Да, теперь понял, тут опять всё дело в моей иногда невнимательности а не в чем либо еще.

Добавлено через 2 минуты
Да тут теперь даже и MSDN не нужен, всё там работало отлично, прямо так как я и написал)

Добавлено через 16 минут

Не по теме:

Но всё таки прикол в этом свойстве с++ есть. Если написать так:

C++
1
char comp_Num[20];
, то массив будет инициализирован мусором, и вообще наверно может быть опасен для другой памяти, используемой программой. Прикол в том что мусор в strlen сработал, и казалось бы, всё отлично до поры до времени

Croessmah
28.05.2014, 02:58
  #6

Не по теме:

Цитата Сообщение от fredwriter Посмотреть сообщение
то массив будет инициализирован мусором, и вообще наверно может быть опасен для другой памяти, используемой программой.
убить и карандашом можно. Так опасен ли карандаш?

MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
28.05.2014, 03:02     Тема из раздела "Непонятки в++"
Еще ссылки по теме:

Программа "Аэрофлот", тема "Структура" C++
Тема научной работы по предмету "Алгоритмизация и программирование" C++
C++ Необработанное исключение в "0x104b2288" в "Matrix.exe": 0xC0000005: Нарушение прав доступа при записи "0xcdcd

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

Или воспользуйтесь поиском по форуму:
fredwriter
7 / 7 / 1
Регистрация: 17.10.2009
Сообщений: 269
28.05.2014, 03:02  [ТС]     Тема из раздела "Непонятки в++" #7
В моём случае опасен, потому что пока я отлаживаю программу, чудеса случаются именно тогда когда в массивах мусор всякий, другие переменные страдать начинают потерей своих не так давно полученных значений.
Yandex
Объявления
28.05.2014, 03:02     Тема из раздела "Непонятки в++"
Ответ Создать тему
Опции темы

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