_fgettsで改行を取り除きたい

[戻る]
へいる 2005/06/14(火) 15:04:33
_fgettsでファイルから文字列を読み取ると
最後に改行が入ってしまいます。
これをうまく取り除きたいのですが、
MBCSとUNICODEだとバイト数が違うと聞きました。
こういう場合はどうやるのがいいのでしょうか?
思いつく方法は
buf[_tcslen(buf)-1] = _T('\0');
ですが、これでいいんでしょうか?
-1のところは-2なんでしょうか?
UNICODEの実行環境が無いのでイマイチわかりません。
どうかご教授お願いします。

Ban 2005/06/14(火) 15:17:27
UNICODE 環境だと '\0' も L'\0' になりますから sizeof(TCHAR) で。

tetrapod 2005/06/14(火) 15:21:25
TCHAR=wchar_t の場合でも -2 しちゃまずいでしょう。

TCHAR buf[BUFSIZE];
であるなら提示のとおり buf[_tcslen(buf)-1] = _T('\0'); でOKっす。

Ban 2005/06/14(火) 15:27:13
> TCHAR=wchar_t の場合でも -2 しちゃまずいでしょう。

御意。配列のインデクスでした....orz

へいる 2005/06/14(火) 15:31:13
[[解決]]
どうもありがとうございました。
勉強になりました。m(__)m

Ban 2005/06/14(火) 15:31:42
buf が char (というかバイト配列)な先入観にとらわれすぎでした。
buf の型依存...確かに。

tetrapod 2005/06/14(火) 16:15:18
ちなみに

>最後に改行が入ってしまいます。
は必ずしも真ではないので buf[_tcslen(buf)-1]=0; ではうまくないかもしれません。
1行が BUFSIZE より長い場合...

へいる 2005/06/14(火) 17:34:46
なるほど〜
プログラムで読み書きする分にはバッファは十分大きく取ってますが
テキストエディタ等で大きくされるとまずいですね。
_tcschr(buf, _T('\n'))
とかでチェックした方がいいですね。
ありがとうございました。

古いスレッドには追加発言できません。