2011-04-05 151 views
2

這是最好的連接方式?Const char * vs const wchar_t *(concatenation)

const char * s1= "\nInit() failed: "; 
const char * s2 = "\n"; 
char buf[100]; 
strcpy(buf, s1); 
strcat(buf, initError); 
strcat(buf, s2); 
wprintf(buf); 

它給出錯誤。什麼應該是正確的方法?

謝謝。

+2

什麼是initError?另外如果你正在處理字符,你必須使用printf。是wchar_t類型的initError嗎? – 2011-04-05 13:47:53

+0

你在找'wcstombs'嗎? – Erik 2011-04-05 13:48:02

+0

如果我使用printf和fprintf,initError的類型也是const char * – Azodious 2011-04-05 13:49:56

回答

2

我認爲正確的做法是:

std::string msg = std::string("Init() Failed ") + initError + "\n"; 
std::cout<<msg; 

std::cout<<"Init() Failed "<<initError<<"\n"; 
+0

但如果我使用帶有味精的wprintf或fwprintf,它將不起作用。 – Azodious 2011-04-05 13:57:41

+0

@Azodious - std :: wcout會工作! – 2011-04-05 14:01:31

+0

@Azodious:如果你想使用c函數,使用'msg.c_str()'。 – Xeo 2011-04-05 14:44:56

1

你的大問題是,你混合數據類型。使用char及相關功能或wchar及相關功能。如果您需要混合它們,請使用轉換功能。這不會比嘗試將float傳遞給需要字符串的函數更有意義。 (編譯器應該能夠趕上這兩個問題,因爲wprintf聲明是一樣的東西int wprintf(const wchar_t *, ...)。)

另外一個更小的,問題是,printf和如不打印出一般串正確的功能,因爲如果字符串中有任何百分號,你會得到未定義的行爲。使用printf("%s",...)puts(...)或相關功能。

而且,既然這是C++,那麼使用std::string類會更好。這並不完美,但它比C風格的琴絃要好得多。

另外,告訴我們錯誤是什麼會有所幫助。你甚至沒有告訴我們這是編譯器錯誤還是運行時錯誤。