
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などのときのstdinのバッファを消すには?
C言語・C++・C#
-
-
4
関数から配列を返すには?
C言語・C++・C#
-
5
数字以外が入力されたらエラー文を出したい。
C言語・C++・C#
-
6
C言語のポインターに関する警告
C言語・C++・C#
-
7
fgets関数を使用したときの文字あふれについて
C言語・C++・C#
-
8
改行を読み飛ばす
C言語・C++・C#
-
9
Enterキーを押されたら次の処理に移るという事をしたい。
C言語・C++・C#
-
10
バッファとは何ですか
C言語・C++・C#
-
11
char str[256]の256の意味は?
C言語・C++・C#
-
12
fgets関数のEOFの扱い方について
C言語・C++・C#
-
13
unsigned long long 型のフォーマット指定子
C言語・C++・C#
-
14
配列の要素数に変数を入れたいときには
C言語・C++・C#
-
15
C言語 配列の長さの上限
C言語・C++・C#
-
16
テキストファイルの行数を取得する方法(C言語
C言語・C++・C#
-
17
c言語のポインタへの文字列入力についてです。
C言語・C++・C#
-
18
char*を初期化したいのですが
C言語・C++・C#
-
19
入力する数字のサイズ制限について
C言語・C++・C#
-
20
C言語での文字列より値を抜き出す
C言語・C++・C#
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
C言語のステップ数をカウントす...
-
CStringのFindで文字列検索を行...
-
if文の判定条件('||'と'&&'の使...
-
fgetsで拾われる改行文字を削除...
-
Aの値からBの値を除するとは??
-
信頼区間の1.96や1.65ってどこ...
-
20'(角度)の計算がわかりま...
-
「指定されたキャストは有効で...
-
独立係数について教えて下さい。
-
「Aに対するBの割合」と「Aに対...
-
scanfの入力をgets関数で読み捨...
-
2番以降って2番も含まれますか...
-
エクセルで可視セルにのみ値貼...
-
C言語での引数の省略方法
-
return 1L
-
Enterキーを押されたら次の処理...
-
c languageで 簡単な質問があ...
-
静的でないメンバ関数の呼び出...
-
プログラムでの数字につく”f”の...
-
マイナスからプラスへ転じた時...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
CStringのFindで文字列検索を行...
-
sscanfとscanfの違いがよくわか...
-
fgets関数を使用したときの文字...
-
fgetsで拾われる改行文字を削除...
-
C言語のステップ数をカウントす...
-
strstrを利用しない文字列検索...
-
charと%c , %s の関係について
-
C言語 空白の行(改行のみ)が...
-
ブランクのチェック
-
文字列中に含まれる文字の個数...
-
itoaわかりません
-
Cで「大文字、小文字の判定」は...
-
C言語 strlen 再入力を促す
-
C言語でパスワード作成ツール
-
反転した数値を表示させるやり方
-
スペースで区切って数字を入力
-
小文字のみを数える方法
-
putsとputcharの違い?
-
CStringについて
-
1行の文字列を時間差で表示する...
おすすめ情報