• ベストアンサー

文字列ファイル表示プログラム

Cプログラムの問題なのですが、 「複数の文字からなるファイルを読み込み、全て読み込んだ後に表示するプログラムを作成したいと思います。あらかじめ文字列を配列として宣言するのではなく、文字列の長さを確認した上で、malloc()標準関数でメモリを割り当て、表示しなさい」 文字列を宣言せずに、どうやったらファイルの中の文字列を読み込むことができるのでしょうか?その上、文字列の長さを確認したあとmalloc関数を使うにはどうすればいいのでしょうか。 どなたか教えてください。お願い致します。

質問者が選んだベストアンサー

  • ベストアンサー
  • a-kuma
  • ベストアンサー率50% (1122/2211)
回答No.1

> どうやったらファイルの中の文字列を読み込むことができるのでしょうか? 一文字ずつ読んでゆきます。一行の長さが分かった後に、もう一度、読み直さ なくてはいけないので、行の頭がどの位置か憶えておく(*)必要があります。   (*) マニュアルの ftell(), fseek() のあたりを調べてください。 malloc() は、指定したサイズのメモリを割り当てるライブラリ関数です。 マニュアルを読めば分かると思いますが、   char *buf;   buf = malloc(必要なサイズ); です。文字列に必要なサイズに終端の '\0' の分があることに気をつけて。

その他の回答 (1)

  • onosuke
  • ベストアンサー率67% (310/456)
回答No.2

ファイルがテキストファイル限定なら… ファイルサイズを直に使えばよいのでは? 文字列にするには終端NULL文字が必要な事,ファイルにはEOFがくっついている事をわすれないように。 ファイル読み込みにはread関数を使いましょう。 mallocですが,普通に使えばよいですよ。

参考URL:
http://www.linux.or.jp/JM/html/LDP_man-pages/man3/malloc.3.html

関連するQ&A

  • ファイルから文字列を読み込んで、検索するプログラム

    以下のようなプログラムをつくりたいのですが、 どうしたらよいでしょうか?? 文字列を配列型に入れるときにわからなくなって しまうのですが。。。 ファイルからデータを順番に読み込み,メモリ上に一次元配列構造に並べて線形探索するプログラムを作成せよ. データの仕様 一行に、 「番号(スペース)読み仮名(スペース)文字列(住所)」 があり、これが10~1000行ほど、ファイルに(.dat) 入っている。 ファイルを配列に読み込んだあと、 番号を入力すると、住所が検索されてでてくる。 問題文も微妙なのですが、 これは番号の配列と住所の配列は別にして、 検索したほうがいいですよね、、? 何かヒントになることだけでも良いので、 よろしくお願いします!

  • 大文字の文字列→小文字の文字列

    C言語初心者です。 ある演習問題をやっていて詰まっています。 自分で入力した大文字の文字列を小文字にするプログラムを作るという問題なのですが、↓の条件があり、こんがらがってしまいました。 ・入力した文字列に小文字が含まれていたら、エラーと表示して再び入力を促し、0を入力するとプログラム終了という流れにする。 ・ポインタ変数を使う。 ・continue文を使う。 ・標準ライブラリ関数は使わない。 です。 ・continue文というのがよくわからない。 ・宣言した関数でどの処理をすればいいのかわからない。 ・大文字を小文字にするというプログラムがわからない。 (アスキーコードをどう使うのか) でつまっています。 どなたかアドバイス・解説・模範解答・指摘などしていただけないでしょうか。 よろしくお願い致します。

  • 文字列のプログラムについて

    キーボードから入力された1行の文字列を逆順(abc -> cba)にして、 更に大文字なら小文字にし、小文字なら大文字にして表示するプログラムを作る問題です。 とりあえず getcharを使い、キーボードから文字列を入力しその文字列を 配列変数に保存し、その配列変数について変換させるのだと思いますが、 どうしてもgetcharでキーボードからえた文字列を配列変数にいれる方法がわかりません。 教えてください。

  • ファイルから数字列を16進数の数字列として読み込むためには?

    C言語初心者です。 0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef… 0135792468acebdf0135792468acebdf0135792468acebdf0135792468acebdf… … のようなファイルがあったときに、このファイルを自分で用意した配列num[]に1次元配列形式、かつ16進数で読み込むコードが思いつかず困っています。ファイルは複数行かつ複数列存在し、各行と各列はそれぞれ長さはマチマチとします。 つまり、例えば 1234abcdf 2315a cedf45 のようなファイルをnum[20]という配列に格納したいのです。 この場合、fgetc, fgets, fscanf等、使える関数は数種類あると思うのですが、どの方法がもっとも効率的に、かつ高速に自分が用意した配列numに読み込めるのでしょうか? また、メモリ量もできるだけ節約したいので、同状況でmalloc等で読み込んだファイルの文字数のみの要素数を確保するやり方も考えているのですが、これも思いつかずに困っています(つまり、num[10000]とかをやるのは避けたいということです) C言語に堪能な方がおられましたらご教授下さい。具体的なソースで説明していただけると助かります。

  • Basicでの文字列操作

    いつもお世話になっております。 ActiveBasicを使いBasic(http://ja.wikipedia.org/wiki/BASIC) の勉強をしております。下記の動きをするプログラムを作りたい場合はどうすれば良いでしょうか? 便利な関数や方法がありましたら教えてください。 お願いいたします。 ユーザが入力した数の分だけザイズ11の配列を作成し 例:ユーザが3と入力したら Dim x$(3)[11] 作成した配列に文字列を入れていき x$(0)="文字列01|01" x$(1)="文字列02|02" x$(2)="文字列03|03" 画面に文字列を奇数番目なら"|"から前の文字列を表示 偶数番目なら"|"より後の文字列を表示する 文字列01 02 文字列03

  • C言語

    以下のC言語のプログラムを教えてください。 お願いします。 (1)標準入力から文字列(2 文字以上)を入力し,文字数を計上すると共に,入力された文字列の逆順に入れ替える処理を実現してください.なお,以下の要件を満たしたプログラムを作成してください. ・ 入力された文字列は,char 型の配列(要素数50)で受け取ること ・ 文字数を計上するcount 関数(引数:配列のアドレス,戻り値:文字数)を定義 し,main 関数より呼び出すこと ・ 文字列を逆順に入れ替えるreverse 関数(引数:配列のアドレス,戻り値:無し) を定義し,main 関数より呼び出すこと ・ 標準出力の処理は,main 関数で記述すること 【プロトタイプ宣言】 int count(char *str); void reverse(char *str); 【実行結果】 文字列を入力してください(2 文字以上) apple 文字数 = 5 入れ換え前 apple 入れ換え後 elppa (2)char 型の配列(要素数50)を2 つ宣言し,標準入力から2 つの文字列を入力してください.そして,格納した字列を入れ替える関数(swapstr 関数)を作成し,入れ替え前と入れ替え後の配列内の値(文字列)を配列名とともに標準出力するプログラムを作成してください. 【プロトタイプ宣言】 void swapstr(char *str1, char *str2); 【実行結果】 2 つの文字列を入力してください apple strawberry 入れ換え前 配列str1 = apple 配列str2 = strawberry 入れ換え後 配列str1 = strawberry 配列str2 = apple

  • PHPプログラムについて

    読み込んだテキストファイルを1行ずつ検索し、特定の文字が見付かればそれに続く文字列を配列に格納するというプログラムを作りたいです。 そこで指定文字列の出現以降の文字列を取り出すというstrchr関数を用いて 作成を試みたのですが上手くいきません。 何か別の方法があれば教授をお願いします。

    • 締切済み
    • PHP
  • 文字列検索の方法

    ○.csvという複数のファイルがあります。 内部のデーターは「,」区切りになってます。 複数のファイルの中に、あるキーワードに一致する文字列を含む ファイル名を一覧で表示する方法(プログラム)を教えてください。 雰囲気は全文検索みたいな感じです。 関数や簡単なプログラムであれば、例をあげて頂ければ幸いです。

    • ベストアンサー
    • Perl
  • 0,1の組み合わせを表示するプログラム

    Javaで以下のようなプログラムを作成したいです(できれば配列を使わずに)。 どうかご教授願いますm(_ _)m 何かしらの文字列を入力(Exit以外なら何でもいい) ↓ 0 1 と表示 ↓ 何かしらの文字列を入力 ↓ 00 01 10 11 と表示 ↓ 何かしらの文字列を入力 ↓ 000 001 010 011 100 101 110 111 と表示 ↓ (以下、Exitが入力されるまでループ・・・)

    • ベストアンサー
    • Java
  • 文字列を比較するプログラム

    キーボードより文字列aと文字列bを入力し、比較する(どちらが辞書並びで先かを表示する)プログラムを作れ。但し、strcmp関数を用いてはならない。 という問題があるんですが文字列の比較のしかたがまったくわかりません。わかりやすく教えていただけるとありがたいです。

専門家に質問してみよう