人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

C言語でプログラムを書きました。以下のプログラムをちょっと変更しようと考えています。どのようにすればいいのでしょうか?

やりたいこと:
10万行のファイルをすべてメモリーに読み込む。

以下のプログラムで

char str2[100000][256];

と宣言していますが動きません。多分、添え字が10万だからだと思います。
どうすればいいのでしょうか。開発環境はVS2005です。

#include "stdafx.h"


int _tmain(int argc, _TCHAR* argv[])
{
FILE *fp;
char str2[100000][256];
char str[256];
int i=0;

fp=fopen(argv[1],"r");
while(!feof(fp)){
fgets(str,256,fp);
strcpy(str2[i],str);
i=i+1;
}
....................
....................
//getchar();
return 0;
}

●質問者: mai_mai_mail
●カテゴリ:コンピュータ インターネット
✍キーワード:ARGV Char C言語 FP STR
○ 状態 :終了
└ 回答数 : 3/3件

▽最新の回答へ

1 ● steel-plate
●27ポイント

なぜ10万行読み込まないといけないのかはわかりませんが、単純に考えると、次ポインタを持つのが一般的でしょうね。

struct list {
char str[256];
struct list *next;/* 自己参照構造体 */
};

それで、一行読み込むごとにlist構造体分メモリを確保(malloc)してやるのがいいと思います。


以下のURLが参考になるかと思います

自己参照構造体


2 ● POPO
●47ポイント

Visual C++だとスタックサイズのデフォルトは1MBしかありません。

http://msdn2.microsoft.com/ja-jp/library/8cxs58a6(VS.80).aspx

とりあえず楽に動かしたいだけなら、リンカオプションでスタックサイズを増やすか、str2[]を外部変数として宣言してはいかがでしょう?

char str2[100000][256];

int _tmain(int argc, _TCHAR* argv[])

{

FILE *fp;

char str[256];

int i=0;

◎質問者からの返答

簡単に解決しました。


3 ● KUROX
●10ポイント

>添え字が10万だからだと思います

関係ないと思います。

添え字を100にしたらきちんと動作するとか、

実行時にメモリーオーバーフォローみたいなエラーが

出てるのならそうかもしれませんが・・。

---------------

1行は必ず半角換算で256文字なのでしょうか?

strcpyより、memcpyで256バイト無条件にCOPYしてみては

どうでしょう。

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ