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

Выделение памяти под wchar_t - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 8, средняя оценка - 4.63
MAnton
 Аватар для MAnton
23 / 23 / 1
Регистрация: 21.04.2011
Сообщений: 139
13.07.2012, 13:45     Выделение памяти под wchar_t #1
вот такой код:
C++ (Qt)
1
2
3
4
5
char *str=new char[strlen("stroka+1")];
strcpy(str,"stroka");
int l=strlen(str);
wchar_t *wstr=new wchar_t[l];
mbstowcs(wstr,str,l);
В отладчике обнаружил такую запись:
wstr 0x004b7438 "stroka﷽﷽ꮫꮫꮫꮫ" wchar_t *
у меня вопрос - что это за квадратики?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
13.07.2012, 13:45     Выделение памяти под wchar_t
Посмотрите здесь:

Выделение памяти под матрицу C++
Выделение памяти под строку C++
C++ Выделение памяти под структуры
Выделение памяти под массив C++
Выделение памяти под массивы C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Evg
Эксперт С++Автор FAQ
 Аватар для Evg
16833 / 5254 / 323
Регистрация: 30.03.2009
Сообщений: 14,145
Записей в блоге: 26
13.07.2012, 14:23     Выделение памяти под wchar_t #2
На всякий случай. Не

C
char *str=new char[strlen("stroka+1")];
а

C
char *str=new char[strlen("stroka"+1)];
alexey31415
 Аватар для alexey31415
59 / 59 / 3
Регистрация: 16.05.2010
Сообщений: 632
13.07.2012, 14:25     Выделение памяти под wchar_t #3
wchar_t занимает 2 байта,а char 1 байт,вот видно половина только и заполнилась,попробуй записать следующее:строка
Ksan
26 / 26 / 0
Регистрация: 02.11.2010
Сообщений: 370
13.07.2012, 14:33     Выделение памяти под wchar_t #4
Evg, не
C++
1
char *str=new char[strlen("stroka"+1)];
, а
C++
1
char *str=new char[strlen("stroka")+1];
Evg
Эксперт С++Автор FAQ
 Аватар для Evg
16833 / 5254 / 323
Регистрация: 30.03.2009
Сообщений: 14,145
Записей в блоге: 26
13.07.2012, 14:45     Выделение памяти под wchar_t #5
Ksan, да, накосячил

Цитата Сообщение от alexey31415 Посмотреть сообщение
wchar_t занимает 2 байта,а char 1 байт,вот видно половина только и заполнилась,попробуй записать следующее:строка
Думается, что при конвертации надо хвостовой символ 0 захватывать, т.е. в вызов mbstowcs последним параметром передавать "l+1", а то после конвертации в конце остаётся мусор. А при выделении памяти под wstr так же указывать на один символ больше (для хвостового нуля)
alexey31415
 Аватар для alexey31415
59 / 59 / 3
Регистрация: 16.05.2010
Сообщений: 632
13.07.2012, 14:55     Выделение памяти под wchar_t #6
не,я просто имел ввиду,что в случае с английским алфавитом возникает такая,а вот в случае,например,с русским будет иначе
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
13.07.2012, 15:14     Выделение памяти под wchar_t
Еще ссылки по теме:

выделение памяти под структуру C++
Выделение памяти под матрицу C++
C++ Выделение памяти под матрицу

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

Или воспользуйтесь поиском по форуму:
Evg
Эксперт С++Автор FAQ
 Аватар для Evg
16833 / 5254 / 323
Регистрация: 30.03.2009
Сообщений: 14,145
Записей в блоге: 26
13.07.2012, 15:14     Выделение памяти под wchar_t #7
Цитата Сообщение от alexey31415 Посмотреть сообщение
не,я просто имел ввиду,что в случае с английским алфавитом возникает такая,а вот в случае,например,с русским будет иначе
Если конвертировать с нулём, то всё будет хорошо. А то, что в буфере остались лишние символы - пофиг, они экранированы нулём
Yandex
Объявления
13.07.2012, 15:14     Выделение памяти под wchar_t
Ответ Создать тему
Опции темы

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