![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?e8efa67)
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を探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
allocってなんですか?
-
ポインタのポインタの初期化法
-
128ビット変数の符合表現について
-
動的メモリ確保の外部関数
-
VBからMFC-DLL呼び出し
-
C言語 配列の長さの上限
-
配列を使わずに、変数名を動的...
-
プログラムによく出てくるst...
-
配列で格納したものをmsgboxで...
-
C言語のintとcharの違いってな...
-
C言語で特定列だけを抽出して配...
-
fopne で失敗する原因
-
Integer変数をカラにしたいので...
-
VBA基本構文の作り方 2列の...
-
VBAのプログラムで、DIAG = 1# ...
-
あるディレクトリ内のファイル...
-
関数から配列を返すには?
-
char AA[]{"全角文字"};から"全...
-
セグメントエラー
-
ユーザー定義型変数の一括初期化
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
allocってなんですか?
-
c言語のポインタへの文字列入力...
-
newしないオブジェクトについて
-
ヒープメモリの解放について
-
malloc呼び出し時のセグメンテ...
-
構造体でchar name[]と*nameの...
-
ビットをローテートするプログ...
-
配列の添え字の最大数とは?
-
Accessで、メモリを開放するタ...
-
スタック破壊の上手な見つけ方...
-
64ビットと32ビットの違い
-
大容量の静的な確保の限界値
-
C++のnewで確保したメモリーの...
-
stringの最大サイズ
-
GDI+におけるメモリの開放について
-
newでrealloc?
-
callocの処理速度
-
void*型のデータサイズ
-
プログラムが途中で強制終了し...
-
C++で、メンバもヒープに確保さ...
おすすめ情報