_fgettsでファイルから文字列を読み取ると
最後に改行が入ってしまいます。
これをうまく取り除きたいのですが、
MBCSとUNICODEだとバイト数が違うと聞きました。
こういう場合はどうやるのがいいのでしょうか?
思いつく方法は
buf[_tcslen(buf)-1] = _T('\0');
ですが、これでいいんでしょうか?
-1のところは-2なんでしょうか?
UNICODEの実行環境が無いのでイマイチわかりません。
どうかご教授お願いします。
UNICODE 環境だと '\0' も L'\0' になりますから sizeof(TCHAR) で。
TCHAR=wchar_t の場合でも -2 しちゃまずいでしょう。
TCHAR buf[BUFSIZE];
であるなら提示のとおり buf[_tcslen(buf)-1] = _T('\0'); でOKっす。
> TCHAR=wchar_t の場合でも -2 しちゃまずいでしょう。
御意。配列のインデクスでした....orz
どうもありがとうございました。
勉強になりました。m(__)m
buf が char (というかバイト配列)な先入観にとらわれすぎでした。
buf の型依存...確かに。
ちなみに
>最後に改行が入ってしまいます。
は必ずしも真ではないので buf[_tcslen(buf)-1]=0; ではうまくないかもしれません。
1行が BUFSIZE より長い場合...
なるほど~
プログラムで読み書きする分にはバッファは十分大きく取ってますが
テキストエディタ等で大きくされるとまずいですね。
_tcschr(buf, _T('\n'))
とかでチェックした方がいいですね。
ありがとうございました。