2013-12-16 3 views
1

Я пытаюсь преобразовать wchar_t в char используя wcstombs. И он отлично работает, если конвертируется только одно значение, но при преобразовании более 1 значения оно дает неожиданные результаты. Эти два wchar_t значения, которые я хочу, чтобы преобразовать:Преобразование wchar_t в char

wchar_t szBuf[BUFF_LEN]; 
wchar_t szBuf1[BUFF_LEN]; 

и преобразования с использованием wcstombs:

char user[]=""; 
int length = wcstombs(user,szBuf,250); 
char pass[]=""; 
int length1 = wcstombs(pass,szBuf1,250); 

говорят, что если у меня есть Алису в szBuf и alice123 в szBuf1 тогда pass даст правильное значение, но user будет иметь значение, подобное aalice123. Какая ошибка?

ответ

2

Буферы назначения слишком малы.

char user[] = ""; соответствует char user[1] = "";. Это означает, что вы будете писать в нераспределенное пространство, и это неопределенное поведение. Это очень плохо, потому что нет никаких гарантий того, что произойдет.

Укажите размер для destionation буферов: char user[250] = "";

+0

Thanx этой работы. – user3106694

3

Вы вызываете Undefined Behavior, потому что вы пишете за пределами границ буфера. Ваши user и pass буферов имеют длину 1 (они представляют собой массивы, инициализированные копией ""). Таким образом, вы счастливо пишете случайную память, и все может случиться.

Смежные вопросы