WCHAR to char
Доброго времени суток! Помогите, пожалуйста, преобразовать WCHAR в char. В сети я нашёл только примеры по преобразованию wchar_t в char.
Код:
#include <stdio.h>
int main(void)
{
const wchar_t* str = L"Hello Codenet !!!";
char buf[32];
size_t len = wcstombs(buf, str, wcslen(str));
if(len > 0u)
buf[len] = '\0';
puts(buf);
return 0;
}
int main(void)
{
const wchar_t* str = L"Hello Codenet !!!";
char buf[32];
size_t len = wcstombs(buf, str, wcslen(str));
if(len > 0u)
buf[len] = '\0';
puts(buf);
return 0;
}
wchar_t и WCHAR - это одно и то же, если платформа - Windows.
Но для функции DosToApiPath нужно WCHAR, а если wchar_t, то выдаёт ошибку...
Ты попросил преобразовать помочь, а не вызвать функцию. Давай прототип функции и тип переменной, которую хочешь передать.
И вообще, это очень странно, что выдаёт ошибку, ибо WCHAR определяется через wchar_t. Это же один и тот же тип, по сути
P.S. Только что понял, что ссылка немного не та, но всё равно. Глянь объявление WCHAR (F12 тебе в помощь)
А вот и правильная ссылка
Эта ф-ия используется в программе, которая выводит список открытых файлов и принадлежность их к определённому процессу
Цитата: 1_2
Эта ф-ия используется в программе, которая выводит список открытых файлов и принадлежность их к определённому процессу
И сразу всё понятно
Нет бы написать, что эта функция самописная, и дать ссылку на источник. Ну а про типы тебе уже было написано. Быть может, твой косяк в том, что ты не замечаешь там звёздочку в прототипе функции?
Сейчас всё проверю...
Сменил WCHAR на wchar_t - всё работает. Осталось только решить вопрос с конвертацией. Или можно обойтись без неё... а бывает ли ф-ия для поиска определённой строки в строке wchar_t?
Ах да, сразу не заметил — почему-то думал, что тебе надо WCHAR в wchar_t преобразовать. Думаю, что за фигня :)
Код:
char * unicode_to_1251(wchar_t *unicode_string)
{
int err;
char * res;
int res_len = WideCharToMultiByte(
1251, // Code page
0, // Default replacement of illegal chars
unicode_string, // Multibyte characters string
-1, // Number of unicode chars is not known
NULL, // No buffer yet, allocate it later
0, // No buffer
NULL, // Use system default
NULL // We are not interested whether the default char was used
);
if (res_len == 0)
{
printf("Failed to obtain required cp1251 string length\n");
return NULL;
}
res = calloc(sizeof(char), res_len);
if (res == NULL)
{
printf("Failed to allocate cp1251 string\n");
return NULL;
}
err = WideCharToMultiByte(
1251, // Code page
0, // Default replacement of illegal chars
unicode_string, // Multibyte characters string
-1, // Number of unicode chars is not known
res, // Output buffer
res_len, // buffer size
NULL, // Use system default
NULL // We are not interested whether the default char was used
);
if (err == 0)
{
printf("Failed to convert from unicode\n");
free(res);
return NULL;
}
return res;
}
{
int err;
char * res;
int res_len = WideCharToMultiByte(
1251, // Code page
0, // Default replacement of illegal chars
unicode_string, // Multibyte characters string
-1, // Number of unicode chars is not known
NULL, // No buffer yet, allocate it later
0, // No buffer
NULL, // Use system default
NULL // We are not interested whether the default char was used
);
if (res_len == 0)
{
printf("Failed to obtain required cp1251 string length\n");
return NULL;
}
res = calloc(sizeof(char), res_len);
if (res == NULL)
{
printf("Failed to allocate cp1251 string\n");
return NULL;
}
err = WideCharToMultiByte(
1251, // Code page
0, // Default replacement of illegal chars
unicode_string, // Multibyte characters string
-1, // Number of unicode chars is not known
res, // Output buffer
res_len, // buffer size
NULL, // Use system default
NULL // We are not interested whether the default char was used
);
if (err == 0)
{
printf("Failed to convert from unicode\n");
free(res);
return NULL;
}
return res;
}
Для преобразования 'void*' к указателю на тип, не являющемуся 'void', требуется явное приведение.
А если убрать эту строчку, то Нарушение прав доступа...
И как здесь исправить?
СПАСИБО!