※ 引述《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)