
No.3ベストアンサー
- 回答日時:
ポインタとかアドレスとか、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++) )とか。
この回答への補足
解答ありがとうございます。
ご指摘のとおり、終了条件の記述が不足していました。たぶんこれが原因
だったと思います。用語の言い回は勉強しなおします。また配列の書き方に
ついては、参考にしていたサイトで多かった書き方で書いたのですが、自分
も配列を用いて書いた方が好きなので、配列を使用して書くことにします。
適切な指摘をありがとうございます。
No.4
- 回答日時:
> 実際に皆さんが改行文字を探して、置換する際にはどのようになさるのでしょうか?
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"); //もしもを考えて二段構えですノ。
非常に見やすい解答をありがとうございます。
このやり方は初めて拝見しました。素人目ではありますが、ソースがすっきり
するのでこの方法を使わせてもらいます。ただ、質問の要旨から、ベストアン
サーは他の方につけさせて頂きます。ありがとうございました。
No.1
- 回答日時:
それのやりかたでいいはずですが?
考え方は正しいけど、その仕様通りにプログラミングできてないように思います。
具体的にどんなプログラムを書いたのですか?
質問文で気になるのは「文字変数のアドレス」というのが何を表しているか、です。
返信ありがとうございます。
自分でこの質問ページが閉じられなかったので開けっ放しになっていた
のですが、一応解決はできました。ただその方法は、変数をもう一つ作って
その変数に文字をコピーしていく方法で解決しました。アドレスという表現
が不適格だったと思いますが、自分の意味したアドレスはポインタの値のこ
とです。取得方法はstrというcharの配列に格納した文字列に対して
for(i=0;;i++){
if(*(str+i)=='/n') {
*(str+i)='\0';
break;
}
と言う方法でiを置換したい文字列のポインタとして取得しました。上の置換
動作は警告がでてうまくいかなかったものです。
すでに問題は解決?したので重要度は低くなりましたが、実際に皆さんが改行
文字を探して、置換する際にはどのようになさるのでしょうか?
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
-
プロが教える店舗&オフィスのセキュリティ対策術
中・小規模の店舗やオフィスのセキュリティセキュリティ対策について、プロにどう対策すべきか 何を注意すべきかを教えていただきました!
-
ファイルから読み取った改行文字を消す方法
C言語・C++・C#
-
改行を読み飛ばす
C言語・C++・C#
-
fgets( ) の返り値は何?
C言語・C++・C#
-
4
fgetsなどのときのstdinのバッファを消すには?
C言語・C++・C#
-
5
Enterキーを押されたら次の処理に移るという事をしたい。
C言語・C++・C#
-
6
C言語 ファイルの指定された行を表示
C言語・C++・C#
-
7
C言語のポインターに関する警告
C言語・C++・C#
-
8
fgets関数を使用したときの文字あふれについて
C言語・C++・C#
-
9
バッファとは何ですか
C言語・C++・C#
-
10
テキストファイルの行数を取得する方法(C言語
C言語・C++・C#
-
11
getcの改行判定
C言語・C++・C#
-
12
C言語の標準入力で改行しない方法
C言語・C++・C#
-
13
リスト構造のソートで悩んでます。。。
C言語・C++・C#
-
14
数字以外が入力されたらエラー文を出したい。
C言語・C++・C#
-
15
<unistd.h>をVisualStudioでつかえるようにする
C言語・C++・C#
-
16
C言語 配列の長さの上限
C言語・C++・C#
-
17
sscanfとscanfの違いがよくわからないのですが、簡単に優しく教えて下さい。 お願い致します。
C言語・C++・C#
-
18
エラーの意味は? Lvalue required
C言語・C++・C#
-
19
C言語 exitの使い方
C言語・C++・C#
-
20
構造体のメンバをfor文で回したい
C言語・C++・C#
関連するカテゴリからQ&Aを探す
このQ&Aを見た人がよく見るQ&A
人気Q&Aランキング
-
4
sscanfとscanfの違いがよくわか...
-
5
単語数のカウントについて
-
6
fgetsで拾われる改行文字を削除...
-
7
fgets関数を使用したときの文字...
-
8
itoaわかりません
-
9
atoiでの文字列以外のエラー処...
-
10
[Java]文字列分割
-
11
strstrを利用しない文字列検索...
-
12
putsとputcharの違い?
-
13
【続】コマンドライン引数を使...
-
14
C++
-
15
C言語、単語ごとに改行したい
-
16
反転した数値を表示させるやり方
-
17
ブランクのチェック
-
18
日本語の変換の問題
-
19
EXCELの分散分析表のP-値が....
-
20
c言語でユーザ関数を利用して複...
おすすめ情報
公式facebook
公式twitter