powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / C++ [игнор отключен] [закрыт для гостей] / headache
12 сообщений из 12, страница 1 из 1
headache
    #34164443
Фотография Cerebrum
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Объясните, почему не хочет работать эта лажа, а то я уже последние мозги вывихнул

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
wchar_t* ch = L"[aBc345аAвГUдеЁжзwW]";
size_t size = _msize((void*)ch);
wchar_t* pCh = _wcsdup(ch);
if(pCh)
{
	if(_wcslwr_s(pCh, size) == NULL)
		free(pCh);
}
Спасибо!

--------------------------------------------------------------
[подпись с другого сайта]
...
Рейтинг: 0 / 0
headache
    #34166622
Фотография Cerebrum
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
up


--------------------------------------------------------------
[подпись с другого сайта]
...
Рейтинг: 0 / 0
headache
    #34166770
на вскидку две проблемы (я смотрел msdn):

1) _msize

The _msize function returns the size, in bytes, of the memory block allocated by a call to calloc, malloc, or realloc.

2) _wcslwr_s

Return Value
Zero if successful; a non-zero error code on failure.
...
Рейтинг: 0 / 0
headache
    #34166804
Фотография Cerebrum
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Голенков Владимирна вскидку две проблемы (я смотрел msdn):

1) _msize

The _msize function returns the size, in bytes, of the memory block allocated by a call to calloc, malloc, or realloc.


я мог бы выделить память и c помощью malloc, результата бы это не дало
Голенков Владимир
2) _wcslwr_s

Return Value
Zero if successful; a non-zero error code on failure.
а здесь что не так?
...
Рейтинг: 0 / 0
headache
    #34166922
я мог бы выделить память и c помощью malloc, результата бы это не дало

просто _msize некорректно вызывать для статических констант..

попробуйте так:

size_t size = wcslen(ch) + 1;


а здесь что не так?

- все-таки NULL подразумевает указатель
- в случае ошибки не обязательно делать free(pCh)?
...
Рейтинг: 0 / 0
headache
    #34166940
Фотография Cerebrum
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Голенков Владимир я мог бы выделить память и c помощью malloc, результата бы это не дало

просто _msize некорректно вызывать для статических констант..

попробуйте так:

size_t size = wcslen(ch) + 1;


в случае с wchar_t: wcslen(ch) + 2 //(sizeof(wchar_t))

Голенков Владимир
а здесь что не так?

- все-таки NULL подразумевает указатель
- в случае ошибки не обязательно делать free(pCh)?
согласен
...
Рейтинг: 0 / 0
headache
    #34167026
в случае с wchar_t: wcslen(ch) + 2 //(sizeof(wchar_t))

мне кажется вы ошибаетесь, размер буфера IMHO должен быть не в байтах а в символах

можно альтернативно:

size_t size = _msize(pCh) / sizeof(wchar_t);
...
Рейтинг: 0 / 0
headache
    #34167059
Фотография Cerebrum
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Хотя так тоже не работает

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
wchar_t* ch		= L"[aBc345аAвГUдеЁжзwW]";

		size_t len		= wcslen(ch);
		size_t size		= len * sizeof(wchar_t) + sizeof(wchar_t);

		wchar_t* pCh = _wcsdup(ch);
		if(pCh)
		{
			_wcslwr_s(pCh, size);
			//cout << pCh << endl;
		}
		free(pCh);

--------------------------------------------------------------
[подпись с другого сайта]
...
Рейтинг: 0 / 0
headache
    #34167186
Хотя так тоже не работает

а так?

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
wchar_t* ch = L"[aBc345аAвГUдеЁжзwW]";

wchar_t* pCh = _wcsdup(ch);
if(pCh)
{
	size_t size = _msize(pCh) / sizeof(wchar_t);
	_wcslwr_s(pCh, size);
	//cout << pCh << endl;
	free(pCh);
}


мне вообще не понятно, зачем нужен size, ведь _wcslwr_s требует null terminated string..
...
Рейтинг: 0 / 0
headache
    #34167620
Фотография Cerebrum
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Спасибо, кажись заработало


--------------------------------------------------------------
[подпись с другого сайта]
...
Рейтинг: 0 / 0
headache
    #34169763
maXmo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вообще-то лучше юзать wcslen, msize возвращает размер выделенного блока, который может быть больше хранимой в нём строки и даже больше размера, запрошенного при выделении блока.
...
Рейтинг: 0 / 0
headache
    #34169768
maXmo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
хм... хотя нет... туплю
...
Рейтинг: 0 / 0
12 сообщений из 12, страница 1 из 1
Форумы / C++ [игнор отключен] [закрыт для гостей] / headache
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]