やりたいこと:
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;
}
なぜ10万行読み込まないといけないのかはわかりませんが、単純に考えると、次ポインタを持つのが一般的でしょうね。
struct list { char str[256]; struct list *next; /* 自己参照構造体 */ };
それで、一行読み込むごとにlist構造体分メモリを確保(malloc)してやるのがいいと思います。
以下のURLが参考になるかと思います
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;
>添え字が10万だからだと思います
関係ないと思います。
添え字を100にしたらきちんと動作するとか、
実行時にメモリーオーバーフォローみたいなエラーが
出てるのならそうかもしれませんが・・。
---------------
1行は必ず半角換算で256文字なのでしょうか?
strcpyより、memcpyで256バイト無条件にCOPYしてみては
どうでしょう。
簡単に解決しました。