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

Как заполнить массив wchar_t пробелами - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 10, средняя оценка - 4.70
Tolias28
202 / 117 / 2
Регистрация: 18.08.2010
Сообщений: 1,006
28.02.2013, 20:42     Как заполнить массив wchar_t пробелами #1
Пробовал вот так:
C++
1
2
3
4
5
int length = 4;
wchar_t* str = new wchar_t[length + 1];
FillMemory(str, length,L' ');
str[length] = L'\0';
wprintf(L"%s!", str);
И на консоли получаю такой вывод:
Код
????!
а должно то быть вот так:
Код
    !
Если использовать массив ANSI-символов, то все пашет ок:
C++
1
2
3
4
5
int length = 4;
char* str = new char[length + 1];
FillMemory(str, length,' ');
str[length] = '\0';
printf("%s!", str);
Почему же это на пашет для массива с UNICODE-символами?

Пробовал также делать без символа L перед константными строками, но это результата не меняет (все те же непонятные знаки вопроса на консоли вместо пробелов)
C++
1
2
3
4
5
int length = 4;
wchar_t* str = new wchar_t[length + 1];
FillMemory(str, length,' ');
str[length] = '\0';
wprintf(L"%s!", str);
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
28.02.2013, 20:42     Как заполнить массив wchar_t пробелами
Посмотрите здесь:

C++ как заполнить массив
Как заполнить массив! C++
как заполнить массив N*N ? C++
C++ Как равномерно заполнить массив
Как заполнить массив в цикле? C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
xtorne21st
интересующийся
300 / 271 / 19
Регистрация: 25.09.2010
Сообщений: 1,056
28.02.2013, 21:35     Как заполнить массив wchar_t пробелами #2
C++
1
setlocale(0, "");
или
C++
1
std::locale::global(std::locale(""));
Tolias28
202 / 117 / 2
Регистрация: 18.08.2010
Сообщений: 1,006
28.02.2013, 22:27  [ТС]     Как заполнить массив wchar_t пробелами #3
xtorne21st, пробовал вызывать и первую и вторую предложенную вами функцию. Ситуацию это не исправляет, а даже наоборот получается что-то еще интереснее: вместо четырех знаков вопроса выводится два крестики и два знака вопроса. Приблизительно вот так: ++??
Только там не плюсы, а эти графиеские символы плюсов(которые когда-то использовались для рисования окон в текстовом режиме)
xtorne21st
интересующийся
300 / 271 / 19
Регистрация: 25.09.2010
Сообщений: 1,056
28.02.2013, 22:40     Как заполнить массив wchar_t пробелами #4
Вот на моём линуксе с локалью utf-8:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#include <iostream>
#include <stdio.h>
#include <wctype.h>
 
int main(void)
{
    setlocale(0, "");
 
    const int length = 4;
    wchar_t* str = new wchar_t[length+1];
    
    str[0] = L'a'; str[1] = L'b'; str[2] = L'c'; str[3] = L'd';
    wprintf(str);
    wprintf(L"\n");
 
    str[2] = L' ';
    wprintf(str);
    wprintf(L"\n");
 
    delete [] str;
 
    return 0;
}
Bash
1
2
3
ilyuha21st@coldshoot:~/projects$ ./prog
abcd
ab dilyuha21st@coldshoot:~/projects$
Tolias28
202 / 117 / 2
Регистрация: 18.08.2010
Сообщений: 1,006
28.02.2013, 22:45  [ТС]     Как заполнить массив wchar_t пробелами #5
xtorne21st, у меня этот код тоже будет работать. А вы попробуйте вместо этого:
C++
1
str[0] = L'a'; str[1] = L'b'; str[2] = L'c'; str[3] = L'd';
вызвать
C++
1
FillMemory(str, length,' ');
и увидите, что будут знаки вопроса.

Добавлено через 1 минуту
Я изначально не знаю длины строки, потому не могу использовать инициализацию подобно тому, как это предложили вы. Да и представьте, если размер строки 100 элементов. Что вы все 100 элементов будете так заполнять?

Добавлено через 1 минуту
эх, пришлось написать свой велосипед... но работающий и удовлетворяющий моему вопросу темы.
C++
1
2
3
4
5
6
7
8
9
void FillString(wchar_t* str, wchar_t ch)
{
    int length = wcslen(str) - 1;
    for(int i = 0; i < length; i++)
    {
        str[i] = ch;
    }
    str[length] = '\0';
}
xtorne21st
интересующийся
300 / 271 / 19
Регистрация: 25.09.2010
Сообщений: 1,056
28.02.2013, 23:00     Как заполнить массив wchar_t пробелами #6
Цитата Сообщение от Tolias28 Посмотреть сообщение
FillMemory(str, length,' ');
Это вы откуда выдернули?
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
28.02.2013, 23:00     Как заполнить массив wchar_t пробелами
Еще ссылки по теме:

Cannot convert from 'wchar_t' to 'const wchar_t *' C++
Wchar_t двумерный массив с инициализацией C++
C++ Указатель на const двумерный массив wchar_t

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

Или воспользуйтесь поиском по форуму:
Tolias28
202 / 117 / 2
Регистрация: 18.08.2010
Сообщений: 1,006
28.02.2013, 23:00  [ТС]     Как заполнить массив wchar_t пробелами #7
Цитата Сообщение от xtorne21st Посмотреть сообщение
Это вы откуда выдернули?
в инете нашел по запросу уже не помню какому. Искал, как заполнить массив символов
Yandex
Объявления
28.02.2013, 23:00     Как заполнить массив wchar_t пробелами
Ответ Создать тему
Опции темы

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