文字列の取得について – プログラミング – Home

通知
すべてクリア

[解決済] 文字列の取得について


コスモス
 コスモス
(@コスモス)
ゲスト
結合: 23年前
投稿: 15
Topic starter  

いつもお世話になっております。

先日皆様からのアドバイスで、ファイルから文字を読み取ってこれたのですが、
条件に合った文字列が入ってきた時の処理に困っています。

以下のようなコードを書きました。

char cLine[128];
//c_systpndataファイル読み込み
 while (fgets(cLine, 100, fpc) != NULL)
{
//文字列が[INF]であればカウントUP
if(memcmp(cLine, [INF], strlen(cLine))==0){
iCount++;
}

これでデバッグしていったのですが、cLineに「[INF]」と入っていても、
このif文の中に入ってきてくれません。

ウォッチで見てみるとcLine配列の中に

[
I
N
F
]








と入ってきています。この半角文字の「フ」とは一体何なのでしょう?
どうかアドバイスをいただけませんでしょうか?


引用未解決
トピックタグ
ん
 ん
(@ん)
ゲスト
結合: 23年前
投稿: 81
 

安直な解決策を書けば

 if(memcmp(cLine, [INF], strlen(cLine))==0)
 を
 if(memcmp(cLine, [INF], strlen([INF]))==0)
 に、変えればよいんでは。

あと”フ”ですけど、クリアされてない変数領域には”フ”が入るようです。
Debug の場合。
Releaseの場合は何が入っているかわかりません。

ところで fgets って取得情報の最後に'\0'って入らないんでしたっけ。
最近使ってないんで忘れてしまいました。


返信引用
コスモス
 コスモス
(@コスモス)
ゲスト
結合: 23年前
投稿: 15
Topic starter  

ん様、ありがとうございます。
うまくいきました!

やはり「フ」が入るのは領域が初期化されていなかったからですね...。
疑問がとけてすっきりしました。

>ところで fgets って取得情報の最後に'\0'って入らないんでしたっけ。
調べてみたところ、\0は入るようです。


返信引用
sara
 sara
(@sara)
ゲスト
結合: 23年前
投稿: 99
 

既に解決しているようですが、追加コメントです。

コスモスさんの最初の方法で上手くいかなかったのは、改行文字も読み込まれると付加されてし
まっているからです。
んさんの方法では、行頭が[INF]であるかどうかは判断できますが、[INF][]などが読み込
まれてもカウントされることになることに注意しましょう。

比較する前に、行末の改行文字をカットするようにすると、混乱がなくなります。
行末の改行文字をカットする関数を作っておくと便利です。

例)
void CutNLCode( char* strline )
{
int len = strlen(strline);
if( len == 0 ) return;

if( strline[len-1] == '\n' )
strline[len-1] = '\0';
}

-----------------------------------------------------------
char cLine[128];
//c_systpndataファイル読み込み
 while (fgets(cLine, 100, fpc) != NULL)
{
CutNLCode(cLine); // 改行コードをカット
//文字列が[INF]であればカウントUP
if(strcmp(cLine, [INF])==0){
iCount++;
}
-----------------------------------------------------------
とすると上手くいくと思います。

#2度目以降の質問であっても、開発環境などの情報は記述するようにしましょう


返信引用
コスモス
 コスモス
(@コスモス)
ゲスト
結合: 23年前
投稿: 15
Topic starter  

sara様、アドバイスありがとうございました!
さらにプログラムの性能が上がり感謝しています。
色々と条件を考えて作っていかなければいけませんね。
大変勉強になりました。

また、バージョンの書き忘れ、大変失礼致しました。
今回はWindows2000、VisuaC++6.0で作成しております。


返信引用

返信する

投稿者名

投稿者メールアドレス

タイトル *

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