Abilie
OKGuide
おけったー
ARIGATO
OKMusic
OKStars
exstamp
myFave
法人向けサービス
初めての方へ
FAQ
○○だけど…
質問する
詳細検索
トップ
Q&Aのカテゴリ
特集一覧
ランキング
○○だけど…
ライフ
デジタルライフ
趣味
エンタメ
美容・健康
ビジネス・キャリア
社会
マネー
学問・教育
旅行・レジャー
技術者向け
全てのカテゴリを見る
ありがとうポイントランキング
OKWaveアワード
トップ
[技術者向] コンピューター
▼
ライフ
デジタルライフ
趣味
エンターテインメント
美容・健康
ビジネス・キャリア
社会
マネー
学問・教育
地域情報
[地域情報] 旅行・レジャー
[技術者向] コンピューター
大規模災害
商品ウォッチ
アンケート
このQ&Aコミュニティーについて
特別企画
おしゃべり広場
企業公式
プログラミング
▼
ハードウェア(サーバー)
OS
データベース
プログラミング
開発
業務ソフトウェア
運用・管理
ネットワークセキュリティ
その他([技術者向] コンピューター)
C・C++
▼
Microsoft ASP
C・C++
CGI
Java
JavaScript
Perl
PHP
Visual Basic
Webデザイン・CSS
Flash
HTML
XML
AJAX
Ruby
その他(プログラミング)
解決済みの質問
印刷
質問:No.6446470
▼
読み込み中です
kfnorisu
すぐに回答ほしいです
お気に入り投稿に追加する
(
0
人が追加しました)
回答数
4
閲覧数
2570
fgetsで拾われる改行文字を削除したい
お世話になります
C言語初心者のものです。今課題でC言語を用いたプログラミングを
Fedora上でやっています。問題は、fgetsでテキストファイルから、取得
した文字列の中から改行文字を削除できないことです。文字変数のアド
レスはわかっているのですが、終端文字に置換しようとすると、セグメ
ントエラーになってしまいます。これは如何にして解決すべきでしょう
か。よろしくお願いします。
投稿日時 - 2011-01-14 02:52:07
通報する
ブックマーク
▼
はてな
ヤフー
Bussurl
del.icio.us
メールで紹介
質問者が選んだベストアンサー
回答:No.3
▼
kmee
ポインタとかアドレスとか、C言語の用語としてあるものを別の意味に使うとまぎらわしいです。
「ポインタ」「アドレス」と言われたら、 この例なら str, str+i が思い浮びます。
「文字変数のアドレス」だと
char c ;
に対しての
&c
が思い浮びます。
配列なら「添字」、意味的には「x文字目」ですね。
> for(i=0;;i++){
> if(*(str+i)=='/n') {
> *(str+i)='\0';
> break;
> }
> }
/nが\nの間違いなら、この方法で半分正解です。もう少し広い範囲(可能なら全体)で見ないことにはなんとも言えません。
fgetsが最大文字数に達したり、ファイルの最後になったりで、strに改行文字が含まれない場合には、このループは止まりません(Segmentension Falutになって止まる)
・そのような状態になってないか、予めチェックする
・ループを終了させる仕組みを用意しておく
: forの終了条件を記述する、for中で if(*(str+i)=='\0') { break;} 等としておく、等
といった対策が必要です。
あと細かいところを言えば
・strを配列で用意したなら *(s+i)じゃなくてs[i]でいいんじゃないかな
・あるいは char *pみたいにしておいて、 iのループでなく pでループを組む( for(p=str;*p!='\0';p++) )とか。
投稿日時 - 2011-01-14 07:39:49
通報する
お礼する
この回答を支持する
(現在
0
人が支持しています)
補足
解答ありがとうございます。
ご指摘のとおり、終了条件の記述が不足していました。たぶんこれが原因
だったと思います。用語の言い回は勉強しなおします。また配列の書き方に
ついては、参考にしていたサイトで多かった書き方で書いたのですが、自分
も配列を用いて書いた方が好きなので、配列を使用して書くことにします。
適切な指摘をありがとうございます。
投稿日時 - 2011-01-14 11:32:36
この質問は役に立ちましたか?
2
人が「このQ&Aが役に立った」と投票しています
別のキーワードで再検索する
詳細検索
関連キーワード
文字
プログラミング
C言語
テキストファイル
改行
ベストアンサー以外の回答
並び替え
新着順
支持数順
回答:No.4
▼
hiroshi09s
> 実際に皆さんが改行文字を探して、置換する際にはどのようになさるのでしょうか?
fgets()関数で読み込んだ文字列の末尾は、\n を \0 にするということで簡単な strtok()関数を愛用してます。
http://www9.plala.or.jp/sgwr-t/lib/strtok.html
char buff[256];
FILE *fp = fopen(....);
fgets(buff, 256, fp);
strtok(buff, "\n\0"); //もしもを考えて二段構えですノ。
投稿日時 - 2011-01-14 09:02:57
通報する
この回答を支持する
(現在
0
人が支持しています)
お礼
非常に見やすい解答をありがとうございます。
このやり方は初めて拝見しました。素人目ではありますが、ソースがすっきり
するのでこの方法を使わせてもらいます。ただ、質問の要旨から、ベストアン
サーは他の方につけさせて頂きます。ありがとうございました。
投稿日時 - 2011-01-14 11:35:53
回答:No.2
▼
D-Matsu
> 実際に皆さんが改行文字を探して、置換する際にはどのようになさるのでしょうか?
実際にはファイル処理周りにもエラー処理が入りますが、こんな方法ですね。
char line[256];
FILE *fp = fopen(....);
char *p;
fgets(line, 256, fp);
p = strchr(line, '\n');
if(p != NULL) *p = '\0';
投稿日時 - 2011-01-14 07:35:46
通報する
この回答を支持する
(現在
0
人が支持しています)
お礼
解答ありがとうございます。
strchrで探せるんですね。ありがとうございました。
投稿日時 - 2011-01-14 11:28:12
回答:No.1
▼
kmee
それのやりかたでいいはずですが?
考え方は正しいけど、その仕様通りにプログラミングできてないように思います。
具体的にどんなプログラムを書いたのですか?
質問文で気になるのは「文字変数のアドレス」というのが何を表しているか、です。
投稿日時 - 2011-01-14 06:12:58
通報する
この回答を支持する
(現在
0
人が支持しています)
お礼
返信ありがとうございます。
自分でこの質問ページが閉じられなかったので開けっ放しになっていた
のですが、一応解決はできました。ただその方法は、変数をもう一つ作って
その変数に文字をコピーしていく方法で解決しました。アドレスという表現
が不適格だったと思いますが、自分の意味したアドレスはポインタの値のこ
とです。取得方法はstrというcharの配列に格納した文字列に対して
for(i=0;;i++){
if(*(str+i)=='/n') {
*(str+i)='\0';
break;
}
と言う方法でiを置換したい文字列のポインタとして取得しました。上の置換
動作は警告がでてうまくいかなかったものです。
すでに問題は解決?したので重要度は低くなりましたが、実際に皆さんが改行
文字を探して、置換する際にはどのようになさるのでしょうか?
投稿日時 - 2011-01-14 06:41:41
別のキーワードで探す
もっと聞いてみる
質問する
関連するQ&Aはこちら
課題
このような課題が出されました。 課題を丸投ではありませんが、どこをどう手をつけ始めればよいかわかりません。 お手数ですがよろしくお願いします。 次のような動作をするプログラムを作成する。 ファイルを...
テキストファイルで改行に置換したい
テキストファイルで、「(オプション),」の後ろに改行を入れたいです。 置換を試しているのでうがうまくできないので教えて下さい! ...
プログラミング、C言語について・・・
プログラミング、C言語について・・・ 大学の宿題でわからないところがありまして・・・ 課題は、 キーボードから入力した数だけ、*(アスタリスク)を表示するようなプログラミングを作成せよ また、表示...
この他の関連するQ&Aをキーワードで探す
文字
プログラミング
C言語
テキストファイル
改行
別のキーワードで再検索する
詳細検索
プログラミングのサブカテゴリ
Microsoft ASP
C・C++
CGI
Java
JavaScript
Perl
PHP
Visual Basic
Webデザイン・CSS
Flash
HTML
XML
AJAX
Ruby
その他(プログラミング)
既に会員の方はこちらからログインできます
特集
特集をもっと見る
アクセスが多いQ&Aランキング
カテゴリ:
C・C++
本日
週間
月間
90日間
RSS
C++で組んだプログラムの高速化について
文字列の中から1~5桁の数字を抜き出したい
C++ operatorの使用について
4
位
intの変数で得た数値を文字列として使用したい
5
位
C言語で16進数文字列から16進数数値への変換
6
位
現在時刻をミリ秒まで取得
7
位
DWORDの実際の型は何でしょうか
8
位
c#で(",")区切りのcsvファイルから読み込みを行うには?
9
位
int型からchar型への変換
10
位
printf で二進表示を行いたい。
11
位
C言語のグローバル変数の初期化について
12
位
マンセル⇔XYZ,RGB変換式或いは対応表
13
位
C言語 代入演算子の意味をおしえてください
14
位
GetPrivateProfileStringでiniファイル読込む処理を詳しく知りたいのですが・・・
15
位
Mac OS X Lionで,C言語コンパイル
16
位
string型からint型への型変換
17
位
テキストファイルの行数を取得する方法(C言語
18
位
セマフォとmutexの違いは?
19
位
c++ ファイルからの複素数の読み込み
20
位
多重定義が起きている?--lnk2005エラー:VC++
C言語で16進数文字列から16進数数値への変換
string型からint型への型変換
DWORDの実際の型は何でしょうか
4
位
C言語で、数値の桁数を求めるには??
5
位
Mac OS X Lionで,C言語コンパイル
6
位
c#で(",")区切りのcsvファイルから読み込みを行うには?
7
位
構造体のデータを丸ごとコピーしたい
8
位
int型からchar型への変換
9
位
C言語 代入演算子の意味をおしえてください
10
位
windowsでもC言語を始めたいのですが…
11
位
Mac C Undefined x86_64
12
位
fatal error LNK1120: 外部参照 1 が未解決です
13
位
現在時刻をミリ秒まで取得
14
位
マンセル⇔XYZ,RGB変換式或いは対応表
15
位
サンプルプログラムがたくさんあるサイト
16
位
C言語初心者の質問失礼します。
17
位
Visual C++によるcsvファイルの読み込みについて
18
位
プログラミングは独学で習得できるか。
19
位
GetPrivateProfileStringでiniファイル読込む処理を詳しく知りたいのですが・・・
20
位
C言語 配列の長さの上限
C言語で16進数文字列から16進数数値への変換
fatal error LNK1120: 外部参照 1 が未解決です
C言語 代入演算子の意味をおしえてください
4
位
C言語初心者の質問失礼します。
5
位
C言語でルートって・・・・
6
位
DWORDの実際の型は何でしょうか
7
位
int型からchar型への変換
8
位
C言語で、数値の桁数を求めるには??
9
位
string型からint型への型変換
10
位
c#で(",")区切りのcsvファイルから読み込みを行うには?
11
位
マンセル⇔XYZ,RGB変換式或いは対応表
12
位
サンプルプログラムがたくさんあるサイト
13
位
構造体のデータを丸ごとコピーしたい
14
位
Mac C Undefined x86_64
15
位
Mac OS X Lionで,C言語コンパイル
16
位
C言語 配列の長さの上限
17
位
fatal error C1083: include ファイルを開けません というエラーが出ます
18
位
現在時刻をミリ秒まで取得
19
位
GetPrivateProfileStringでiniファイル読込む処理を詳しく知りたいのですが・・・
20
位
C言語 exitの使い方
C言語 代入演算子の意味をおしえてください
C言語で16進数文字列から16進数数値への変換
C言語でルートって・・・・
4
位
DWORDの実際の型は何でしょうか
5
位
fatal error LNK1120: 外部参照 1 が未解決です
6
位
C言語で、数値の桁数を求めるには??
7
位
string型からint型への型変換
8
位
c#で(",")区切りのcsvファイルから読み込みを行うには?
9
位
構造体のデータを丸ごとコピーしたい
10
位
fatal error C1083: include ファイルを開けません というエラーが出ます
11
位
Mac C Undefined x86_64
12
位
int型からchar型への変換
13
位
Mac OS X Lionで,C言語コンパイル
14
位
C言語初心者の質問失礼します。
15
位
C言語 配列の長さの上限
16
位
マンセル⇔XYZ,RGB変換式或いは対応表
17
位
C言語 exitの使い方
18
位
サンプルプログラムがたくさんあるサイト
19
位
Visual C++によるcsvファイルの読み込みについて
20
位
GetPrivateProfileStringでiniファイル読込む処理を詳しく知りたいのですが・・・
20位まで表示
回答のついた最新のQ&A
RSS
カテゴリ:
C・C++
intの変数で得た数値を文字列として使用したい
>asGrid->Cells[9][i] = i;...
Wr5さん
2013-02-14 12:04:41
C++ operatorの使用について
> デバック処理で追った結果、abc::opera...
m-take0220さん
2013-02-14 10:39:23
C++で組んだプログラムの高速化について
まずは、何に時間がかかっているのかを突き止めましょ...
jactaさん
2013-02-14 07:35:51
文字列の中から1~5桁の数字を抜き出したい
>数字の部分を文字から数字に変えたいのです。 ...
yama5140さん
2013-02-14 06:52:40
初めて自分で作ったプログラムは?
web系なら (1)HTMLです。 当時はパソコン...
nanaka2223さん
2013-02-14 06:47:29
c++ ファイルからの複素数の読み込み
できた(Visual C++ 2012)。 #i...
epistemeさん
2013-02-13 22:03:07
もっと見る
-PR-
ピックアップ
おすすめリンク
[技術者向] コンピューター お役立ち質問
PR
詳細検索
-PR-