作者VictorTom (鬼翼&娃娃魚)
看板C_and_CPP
標題Re: [問題] cAlternateFileName是empty的情況
時間Tue Nov 3 10:03:52 2009
※ 引述《lazybones (懶)》之銘言:
: 我在MSDN看到以下內容
:
: If a file has a long file name, the complete name appears in the cFileName
: field, and the 8.3 format truncated version of the name appears in the
: cAlternateFileName field. Otherwise, cAlternateFileName is empty.
:
: 不過我用以下的語法去做判斷時 會出現非預期的情形
:
: if(FindFileData.cAlternateFileName != NULL)
: printf("FileName Too Long\n");
:
: 情形就是不管cAlternateFileName是不是empty
: 他都會印出printf()的內容
: 請問版友 是我哪邊弄錯了?又必須怎麼改進 謝謝!
:
: --
: ★
: ╔╮ ╭═╦╮╭═╦╗╮ ╮╔══╮╭═╦╮╮ ╔╮╔══╮╭══╮
: ╠╣ ╠═╬╣╭╬╩╯╰╦╦╯╠═╦╮║ ╠╣║║╠╣╠╣ ╰═╦╮
: ╠╣ ╭║ ╠╣║╰╔╗ ╠╣ ║ ╠╣║ ╠╣║╰╠╣║╰╔╗║ ╠╣
: ╰╩═╯╰ ╰╝╚═╩╯ ╰╝ ╚═╩╯╰═╩╯╰ ╰╝╚═╩╯╰═╩╯
:
: --
: ※ 發信站: 批踢踢實業坊(ptt.cc)
: ◆ From: 218.211.0.80
: 推 VictorTom:那個 empty, 是指 "", 還是指 NULL ?? 11/02 18:54
: → VictorTom:其實您也可以試著把它們字串全印出來看一遍就知道了XD 11/02 18:54
: → lazybones:我試過 若是empty 印出來是"" 11/03 09:25
: 推 VictorTom:所以是""不是NULL啊, 那你不能用 != NULL來判斷啊@_@" 11/03 09:40
: → VictorTom:如果它只是普通的char[], 那也許就用strcmp(), 或者更簡 11/03 09:40
: → VictorTom:單判斷第一個char是不是'\0'吧:) 11/03 09:40
: → lazybones:或許我說的不夠清楚...這些我都嘗試過了..囧> 11/03 09:49
: → lazybones:結果都一樣... 11/03 09:49
: → lazybones:所以想說是我哪邊理解錯了...Orz 11/03 09:50
: → lazybones:v謝謝 11/03 09:50
: 推 VictorTom:Err~NULL與""(或者char[0]=='\0')都不行!?小弟也暈了Orz 11/03 09:53
: → lazybones:哈 我再想想看 謝謝喔! 11/03 09:57
小弟大概Google了一下與看了一下MSDN, 用!=NULL應該是肯定錯誤的....
這裡是MSDN上對 WIN32_FIND_DATA 這個struct的defination....
typedef struct _WIN32_FIND_DATA {
DWORD dwFileAttributes;
FILETIME ftCreationTime;
FILETIME ftLastAccessTime;
FILETIME ftLastWriteTime;
DWORD nFileSizeHigh;
DWORD nFileSizeLow;
DWORD dwReserved0;
DWORD dwReserved1;
TCHAR cFileName[MAX_PATH];
TCHAR cAlternateFileName[14];
}WIN32_FIND_DATA, *PWIN32_FIND_DATA, *LPWIN32_FIND_DATA;
所以cAlternateFileName應該是會配有空間而不會是NULL的....
那麼判斷""還不行, 從定義來看小弟只想得到問題在TCHAR....
您用""判斷的code compiler有給warning嗎??
建議改判斷 _T(""), 或者_T('\0')試試看....
現在想得到的狀況就是撞到了wild char的case了@_@"
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 220.134.41.4
推 lazybones:好!!!非常感謝!!! 11/03 10:04
→ VictorTom:仔細想想, wild char的'\0'....應該也是0x0000吧?? 11/03 10:07
→ VictorTom:那照理說錯用'\0'判斷也應該會碰巧正確的啊....Orz 11/03 10:08