精華區beta C_and_CPP 關於我們 聯絡資訊
※ 引述《timyau (偉哉!WinII A501)》之銘言: : ※ 引述《UNARYvvv (有趣生活)》之銘言: : : 既然已經使用 TCHAR : : 那相關的字串處理函式也該用 t 類型的吧,_tcscpy : : 直接使用針對 wchar_t* 的 wcscpy : : 以及有一行程式寫這樣: : : TCHAR* strTable[ROW, COL] = { L"序號", L"標題", L"內容大綱" }; : : 這表示你預設 TCHAR 就是 wchar_t 囉? : : 那把 unsigned char* 放進 TCHAR * 變數的動作不就很奇怪了? : TCHAR* 是unicode格式的字串 ^^^^^^^^^^^^^^^^^^^^^^^^^^^ : 當然我知道把unsigned char* 放進TCHAR* 有點怪怪的 : 不過我想說TCHAR 是兩個byte,當然可以容納一byte的 unsigned char ^^^^^^^^^^^^^^^^ 嗯..從前面看你使用 TCHAR 的方式,再加上這兩句來看 我猜你對 TCHAR 的定義可能有誤解了 如果你有大略瀏覽過 tchar.h 應該會發現它的定義類似這樣 (實際上複雜得多): #ifdef _UNICODE ... typedef wchar_t TCHAR; ... #else ... typedef char TCHAR; ... #endif 既然選擇使用了 generic text (TCHAR 相關的 T 文字型態) 那相關的字串處理基本上也該使用 _t 系列字串處理函式 字串的字面常數也該要使用 _T / _TEXT macro 來定義 這些問題跟原本解題的方法沒什麼關係 但我是覺得使用一個資料型態之前,先了解正確的性質和用法很重要 (先不管這種設計麻不麻煩/爛不爛..) : 所以就這樣硬放進去了.... 就算透過轉型硬放進去,但是語意上還是不正確的.. 一般字串函式處理 PWSTR (wchar_t*) 結尾是 00 00 但 PSTR (char*) 結尾只有一個 0 這時候你硬轉然後使用另一種類的字串函式來處理 可能都會有奇怪的結果 當然你得先了解 TCHAR 到底佔 1 byte 還是 2 bytes 是要看編譯條件來決定的,因為原本用 TCHAR 就是可以不要去理會到底佔多大 這是 "generic text" 如果對某些文字,確定所用的字元大小的話 那直接使用 char 或 wchar_t 就好了 這時候用 TCHAR 反而有可能影響程式的執行結果 : 因為我也沒想到有其他的方法可以存取CLASS裡面的資料... : 畢竟是前人所留下來的格式... -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 59.104.86.120 ※ 編輯: UNARYvvv 來自: 59.104.86.120 (11/13 03:57)