
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で質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# C言語の質問です、プログラミング初心者です このような文字列があった場合 "abcdef☆ghijk 4 2022/11/22 10:56
- C言語・C++・C# C言語のエラーについて 2 2022/07/11 13:56
- Visual Basic(VBA) 特定の文字を簡単な操作で半角スペースに変換するか削除したい 2 2022/11/01 10:35
- Visual Basic(VBA) VBAで、特定の文字より後を削除して残った数値を文字列に変換と特定の文字より前も削除したい 3 2022/04/15 19:21
- C言語・C++・C# C言語で 英文字のみからなる文字列、”Radar”、”WasItACatISaw”、”a”、””(空 5 2022/12/20 15:17
- C言語・C++・C# C#の問題です。 文字列型の配列 s[100] にキーボードから入力された100文字以内の文字列(単 2 2022/06/22 15:18
- その他(コンピューター・テクノロジー) 【Tableau Desktop】文字列から8桁の数字を日付型(yyyyMMdd)として取得 1 2023/07/31 10:17
- その他(プログラミング・Web制作) 変換のプログラムを教えてください。 6 2023/07/01 09:57
- C言語・C++・C# c言語 int temp = 0; if(isdigit(arr[i])){ temp=arr[i] 2 2022/03/27 01:44
- Visual Basic(VBA) 【至急】 当方初心者です。 マクロについて知恵をお貸しください。 ★したい動作 ①リストE列2行目か 4 2022/09/29 18:56
このQ&Aを見た人はこんなQ&Aも見ています
-
ファイルから読み取った改行文字を消す方法
C言語・C++・C#
-
文字列から空白を取り除きたいのですが
C言語・C++・C#
-
fgetsなどのときのstdinのバッファを消すには?
C言語・C++・C#
-
-
4
C言語のポインターに関する警告
C言語・C++・C#
-
5
改行を読み飛ばす
C言語・C++・C#
-
6
数字以外が入力されたらエラー文を出したい。
C言語・C++・C#
-
7
Enterキーを押されたら次の処理に移るという事をしたい。
C言語・C++・C#
-
8
構造体のメンバをfor文で回したい
C言語・C++・C#
-
9
関数から配列を返すには?
C言語・C++・C#
-
10
c言語のポインタへの文字列入力についてです。
C言語・C++・C#
-
11
C言語 配列の長さの上限
C言語・C++・C#
-
12
テキストファイルから文字列を読み込んで二次元配列に格納するには
C言語・C++・C#
-
13
fgets関数を使用したときの文字あふれについて
C言語・C++・C#
-
14
sscanfとscanfの違いがよくわからないのですが、簡単に優しく教えて下さい。 お願い致します。
C言語・C++・C#
-
15
リスト構造のソートで悩んでます。。。
C言語・C++・C#
-
16
DWORDとcharの変換
C言語・C++・C#
-
17
CSVファイルの中で、「 , 」カンマを使いたい
その他(コンピューター・テクノロジー)
-
18
CStringのFindで文字列検索を行いたいのですが
C言語・C++・C#
-
19
ファイルから読み込んだデータを構造体に格納できますか?
C言語・C++・C#
-
20
fgets関数のEOFの扱い方について
C言語・C++・C#
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
CStringのFindで文字列検索を行...
-
charと%c , %s の関係について
-
sscanfとscanfの違いがよくわか...
-
fgetsで拾われる改行文字を削除...
-
文字列中に含まれる文字の個数...
-
反転した数値を表示させるやり方
-
C言語の問題 キーボードから1 ...
-
itoaわかりません
-
ブランクのチェック
-
C言語でパスワード作成ツール
-
C言語 空白の行(改行のみ)が...
-
自作の関数を見てください。
-
C言語のisdigit関数を使った問...
-
どうやっても上手くいきません…
-
C言語 strlen 再入力を促す
-
C++
-
初歩的なプログラムなんですが...
-
sscanfでフォーマットに合って...
-
C言語のステップ数をカウントす...
-
c言語について array[i]-‘0’ こ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
CStringのFindで文字列検索を行...
-
fgetsで拾われる改行文字を削除...
-
itoaわかりません
-
sscanfとscanfの違いがよくわか...
-
Cで「大文字、小文字の判定」は...
-
C言語のステップ数をカウントす...
-
fgets関数を使用したときの文字...
-
CStringについて
-
ブランクのチェック
-
単語数のカウントについて
-
C言語 空白の行(改行のみ)が...
-
C言語で可変長から固定長に変換...
-
文字列中に含まれる文字の個数...
-
反転した数値を表示させるやり方
-
fgetsとsscanfを使って一行から...
-
C++
-
メニューバーでクリックした個...
-
fgetsの用法について
-
文字列の途中に「0」がある場...
-
かぶった文字を消すプログラム
おすすめ情報