_fgettsで改行を取り除きたい – プログラミング – Home

_fgettsで改行を取り除きたい
 
通知
すべてクリア

[解決済] _fgettsで改行を取り除きたい


へいる
 へいる
(@へいる)
ゲスト
結合: 19年前
投稿: 3
Topic starter  

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


引用未解決
トピックタグ
Ban
 Ban
(@ban)
Prominent Member
結合: 5年前
投稿: 776
 

UNICODE 環境だと '\0' も L'\0' になりますから sizeof(TCHAR) で。


返信引用
tetrapod
 tetrapod
(@tetrapod)
ゲスト
結合: 21年前
投稿: 830
 

TCHAR=wchar_t の場合でも -2 しちゃまずいでしょう。

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


返信引用
Ban
 Ban
(@ban)
Prominent Member
結合: 5年前
投稿: 776
 

> TCHAR=wchar_t の場合でも -2 しちゃまずいでしょう。

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


返信引用
へいる
 へいる
(@へいる)
ゲスト
結合: 19年前
投稿: 3
Topic starter  

どうもありがとうございました。
勉強になりました。m(__)m


返信引用
Ban
 Ban
(@ban)
Prominent Member
結合: 5年前
投稿: 776
 

buf が char (というかバイト配列)な先入観にとらわれすぎでした。
buf の型依存...確かに。


返信引用
tetrapod
 tetrapod
(@tetrapod)
ゲスト
結合: 21年前
投稿: 830
 

ちなみに

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


返信引用
へいる
 へいる
(@へいる)
ゲスト
結合: 19年前
投稿: 3
Topic starter  

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


返信引用

返信する

投稿者名

投稿者メールアドレス

タイトル *

プレビュー 0リビジョン 保存しました
共有:
タイトルとURLをコピーしました