No.2ベストアンサー
- 回答日時:
文字数固定なら。
。。・先に行数のみを取得しその分だけ、領域を確保して読み込む
・ある程度の領域を用意し、足りなくなったらある程度追加確保する
とかとか
考え方は前者の方が理解しやすいですが、動作的な短所には、
前者はファイル全部を2回読むことになるので無駄。
後者は領域を確保する間隔を大きくすると未使用の領域が出来てしまい、小さくし過ぎると頻繁にメモリ確保を行う可能性があるなど。
以下は10行ずつ領域を追加しながら500行まで、
表示するサンプル。(空白は全角)
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAXINPUTNUM (1024)
int main ( void )
{
int i, cnt, row = 10;
char (*StringTable)[MAXINPUTNUM];
char TempBuffer[MAXINPUTNUM];
StringTable = (char(*)[MAXINPUTNUM])calloc( row, sizeof(char)*MAXINPUTNUM );
if ( StringTable == NULL )
{
return 1;
}
for ( i = 0; i < 500; i++ )
{
if ( row <= i )
{
row+=10;
StringTable =(char(*)[MAXINPUTNUM])realloc( StringTable, (row*(sizeof(char)*MAXINPUTNUM)));
}
sprintf( TempBuffer, "%d行目\n", i + 1 );
strcpy( StringTable[i], TempBuffer );
}
cnt = i;
for ( i = 0; i < cnt; i++ )
{
printf( "%s", StringTable[i] );
}
free( StringTable );
StringTable = NULL;
return 0;
}
この回答へのお礼
お礼日時:2007/09/26 19:00
ありがとうございます。
回答を拝見しましたが難しくて良く理解できていません^^;
とりあえず締め切らさせていただいて、じっくり考えたいと思います。
どうもありがとうございました。
No.1
- 回答日時:
★過去に多数同じような質問に回答しました。
・こちらのカテゴリで 二次元、多次元、malloc、calloc などで検索して下さい。
必ず見つかります。西暦は今年です。下に1つだけ見つけましたので載せます。
http://oshiete1.goo.ne.jp/qa3022605.html→『callocで二次元配列を作成するには?』
・面倒とは思いますが一応は検索してから質問しましょう。
最初に5ページは目を通しましょう。
最初の5ページぐらいで時には見つかります。
・以上。
参考URL:http://oshiete1.goo.ne.jp/qa3022605.html
この回答への補足
動的確保をしたかった為reallocで検索していまして、見つからなかった為質問させていただきました。言葉足らずで申し訳ありませんでした。
補足日時:2007/09/26 18:56お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・人生のプチ美学を教えてください!!
- ・10秒目をつむったら…
- ・あなたの習慣について教えてください!!
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・【大喜利】【投稿~9/18】 おとぎ話『桃太郎』の知られざるエピソード
- ・街中で見かけて「グッときた人」の思い出
- ・「一気に最後まで読んだ」本、教えて下さい!
- ・幼稚園時代「何組」でしたか?
- ・激凹みから立ち直る方法
- ・1つだけ過去を変えられるとしたら?
- ・【あるあるbot連動企画】あるあるbotに投稿したけど採用されなかったあるある募集
- ・【あるあるbot連動企画】フォロワー20万人のアカウントであなたのあるあるを披露してみませんか?
- ・映画のエンドロール観る派?観ない派?
- ・海外旅行から帰ってきたら、まず何を食べる?
- ・誕生日にもらった意外なもの
- ・天使と悪魔選手権
- ・ちょっと先の未来クイズ第2問
- ・【大喜利】【投稿~9/7】 ロボットの住む世界で流行ってる罰ゲームとは?
- ・推しミネラルウォーターはありますか?
- ・都道府県穴埋めゲーム
- ・この人頭いいなと思ったエピソード
- ・準・究極の選択
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
c言語のポインタへの文字列入力...
-
newしないオブジェクトについて
-
メモリ不足になってしまう。
-
new と malloc によるメモリの...
-
MSDNがgethostbynameではなくge...
-
DLLのマルチスレッドの動作につ...
-
allocってなんですか?
-
プログラムが途中で強制終了し...
-
仮に&str[i]のアドレスを上げな...
-
LoadLibraryでAccess Violation...
-
指定したメモリアドレスの値の...
-
mallocで確保するメモリの領域...
-
x64環境で連続4GB以上のメモリ...
-
init関数の意味
-
配列を使わずに、変数名を動的...
-
VBAのプログラムで、DIAG = 1# ...
-
戻り値で構造体を返すことは可...
-
配列の要素数に変数を入れたい...
-
関数から配列を返すには?
-
VB.NETでファイル名順にファイ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
allocってなんですか?
-
newしないオブジェクトについて
-
c言語のポインタへの文字列入力...
-
ヒープメモリの解放について
-
配列の添え字の最大数とは?
-
stringの最大サイズ
-
C++で、メンバもヒープに確保さ...
-
プログラムが途中で強制終了し...
-
void*型のデータサイズ
-
malloc呼び出し時のセグメンテ...
-
スタック破壊の上手な見つけ方...
-
ビットをローテートするプログ...
-
構造体でchar name[]と*nameの...
-
mallocについて
-
GDI+におけるメモリの開放について
-
ポインタのポインタの初期化法
-
構造体を使ったファイルの読み込み
-
C言語 mallocとfreeについて
-
HEAP に関すること
-
VBからMFC-DLL呼び出し
おすすめ情報