Преобразование Unicodestring в Char[]
У меня есть от Со списком, который содержит строки из четырех слов. Когда я нажимаю на одну строку, эти слова должны отображаться в четырех разных текстовых полях. До сих пор у меня все работает, но у меня есть проблема с преобразованием символов. Строка из списка является UnicodeString, но strtok использует char[]. Компилятор сообщает, что met не может преобразовать UnicodeString в Char[]. Это код, который я использую для этого:
{
int a;
UnicodeString b;
char * pch;
int c;
a=DatabaseList->ItemIndex; //databaselist is the listbox
b=DatabaseList->Items->Strings[a];
char str[] = b; //This is the part that fails, telling its unicode and not char[].
pch = strtok (str," ");
c=1;
while (pch!=NULL)
{
if (c==1)
{
ServerAddress->Text=pch;
} else if (c==2)
{
DatabaseName->Text=pch;
} else if (c==3)
{
Username->Text=pch;
} else if (c==4)
{
Password->Text=pch;
}
pch = strtok (NULL, " ");
c=c+1;
}
}
Я знаю, что мой код выглядит хорошо, довольно плохо на самом деле. Я просто изучаю программирование на C++. Может ли кто-нибудь сказать мне, как это преобразовать?
2 ответов
strtok фактически изменяет ваш массив символов, поэтому вам нужно будет создать массив символов, которые вам разрешено изменять. Ссылка непосредственно на строку UnicodeString не будет работать.
// first convert to AnsiString instead of Unicode.
AnsiString ansiB(b);
// allocate enough memory for your char array (and the null terminator)
char* str = new char[ansiB.Length()+1];
// copy the contents of the AnsiString into your char array
strcpy(str, ansiB.c_str());
// the rest of your code goes here
// remember to delete your char array when done
delete[] str;
это работает для меня и экономит мое преобразование в AndiString
// Using a static buffer
#define MAX_SIZE 256
UnicodeString ustring = "Convert me";
char mbstring[MAX_SIZE];
wcstombs(mbstring,ustring.c_str(),MAX_SIZE);
// Using dynamic buffer
char *dmbstring;
dmbstring = new char[ustring.Length() + 1];
wcstombs(dmbstring,ustring.c_str(),ustring.Length() + 1);
// use dmbstring
delete dmbstring;