2012-08-30 15 views
8

मैं एक लिस्टबॉक्स जिसके साथ से एक मिल गया है Unicodestring परिवर्तित चार शब्दों की पंक्तियों में शामिल है। जब मैं एक पंक्ति पर क्लिक करता हूं, तो इन शब्दों को चार अलग-अलग टेक्स्टबॉक्स में देखा जाना चाहिए। अब तक, मैं सब कुछ काम कर रहा है, फिर भी मैं वर्ण परिवर्तित करने के साथ एक समस्या है। लिस्टबॉक्स से स्ट्रिंग एक UnicodeString है, लेकिन strtok एक चार [] का उपयोग करता है। संकलक बताता है कि यूनिकोडस्ट्रिंग को चार [] में कनवर्ट नहीं कर सकता है।लिए चार []

{ 
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; 
    } 
} 

मैं जानता हूँ कि मेरे कोड नहीं करता है वास्तव में अच्छा, बहुत बुरा लग रही: इस कोड मैं इस के लिए उपयोग कर रहा हूँ है। मैं बस सी ++ में कुछ प्रोग्रामिंग सीख रहा हूँ। क्या कोई मुझे बता सकता है कि इसे कैसे परिवर्तित करें?

उत्तर

8

स्ट्रेटोक वास्तव में आपके चार सरणी को संशोधित करता है, इसलिए आपको उन वर्णों की एक सरणी बनाने की आवश्यकता होगी जिन्हें आपको संशोधित करने की अनुमति है। सीधे यूनिकोडस्ट्रिंग स्ट्रिंग में संदर्भित नहीं होगा।

// 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; 
+0

को बदलने आपको बहुत बहुत धन्यवाद की बचत होती है !! मैं यह जानने के लिए जा रहा हूं कि आपने यह कैसे किया, लेकिन यह काम किया! –

+0

मैं हाल ही में लंबाई ansiB.Length() + 1 के चार सरणी बनाने के लिए मेरी पोस्ट का संपादन किया। यह महत्वपूर्ण है। सुनिश्चित करें कि आप वह परिवर्तन करते हैं या आप यादृच्छिक क्रैश प्राप्त कर सकते हैं। –

+0

मुझे प्रोग्राम बंद करने के बाद एक त्रुटि मिलती है। जब मैं कोड आपके द्वारा दी गई इस्तेमाल किया, मैं एक acces उल्लंघन मिलता है, जब मैं यह Forms.hpp को /* TCustomForm.Destroy */इनलाइन __fastcall आभासी ~ TForm (शून्य) कूदता तोड़ने {} इसका मतलब यह कर सकते हैं कुछ के लिए जा रहा है कि वहाँ स्ट्र या कुछ के साथ गलत? –

0

यह मेरे लिए काम करता है और मुझे 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; 
संबंधित मुद्दे