8: 2010-01-18 (月) 11:15:26 lina |
現: 2024-01-08 (月) 12:58:58 lina |
| | | |
| for (i = 0; fgets(fname,32,fp0) != NULL; i++) { | | for (i = 0; fgets(fname,32,fp0) != NULL; i++) { |
| + | |
| //改行コードの引っこ抜き | | //改行コードの引っこ抜き |
| for ( i2 = 31; i2 != 0; i2--){ | | for ( i2 = 31; i2 != 0; i2--){ |
| if ( fname[i2] == 0x0d ) fname[i2] = 0; | | if ( fname[i2] == 0x0d ) fname[i2] = 0; |
| } | | } |
| + | |
| fp1 = fopen(fname, "rb"); | | fp1 = fopen(fname, "rb"); |
| if (fp1 == NULL) { | | if (fp1 == NULL) { |
| fclose(fp1); | | fclose(fp1); |
| } | | } |
| + | |
| // for (i = 0; fscanf(fp0, " %s", fname) == 1; i++) { | | // for (i = 0; fscanf(fp0, " %s", fname) == 1; i++) { |
| for (i = 0; fgets(fname,32,fp0) != NULL; i++) { | | for (i = 0; fgets(fname,32,fp0) != NULL; i++) { |
| + | |
| //改行コードの引っこ抜き | | //改行コードの引っこ抜き |
| for ( i2 = 31; i2 != 0; i2--){ | | for ( i2 = 31; i2 != 0; i2--){ |
| if ( fname[i2] == 0x0d ) fname[i2] = 0x0; | | if ( fname[i2] == 0x0d ) fname[i2] = 0x0; |
| } | | } |
| + | |
| fp1 = fopen(fname, "rb"); | | fp1 = fopen(fname, "rb"); |
| if (fp1 == NULL) { | | if (fp1 == NULL) { |
| | | |
| なぜ読み込んで改行抜きをしたfnameではエラーになるんだろう????? | | なぜ読み込んで改行抜きをしたfnameではエラーになるんだろう????? |
| + | |
| + | こうやったらうまくいった!!! ・・・・でも納得できない・・・なんでだろう??? |
| + | |
| + | strcpy (fname2,fname); |
| + | fp1 = fopen(fname2, "rb"); |
| + | |
| + | |
| + | *最後! 例のバッファ! [#bb8a6fe7] |
| + | |
| + | このbuf0って、文字通り、対象ファイルを読み込んだものを格納するバッファだよね?? で! |
| + | |
| + | static unsigned char buf0[BUFSIZE]; |
| + | |
| + | この命令で、2 × 1024 × 1024バイトの''空文字が格納された文字変数''を用意したわけだよね?(しかもグローバル変数)~ |
| + | ・・・''グローバル変数じゃないもの''にすればOK?? |
| + | |
| + | そんなわけで、こんなことしてみた。すると・・・・ |
| + | |
| + | const int main(int argc, char **argv) |
| + | { |
| + | FILE *fp0, *fp1; |
| + | int i, i2,j, k, size, totalsize = 0; |
| + | unsigned char fname[32], name[8], c; |
| + | unsigned char fname2[32]; |
| + | unsigned char bufX[2*1024*1024]; |
| + | |
| + | おぉ!bufXは使っていないんだけど、とにもかくにもこうやって''グローバルではない変数''しさえすれば、エラーを吐かないぞ? つまり、大きさが問題なんじゃなくて、でかい''グローバル変数''が問題ってことじゃないか! |
| + | |
| + | なぜbuf0はわざわざグローバル変数になってるんだろ? それは、他の関数内でも使われてるからだよね? |
| + | |
| + | const int script(char *opt, char *inp, char *out) |
| + | /* スクリプトが4KBを超えたら死にます */ |
| + | { |
| + | unsigned char *buf = buf0 + 4 * 1024, *scr0 = buf0, *scr1, *s, *s1; |
| + | FILE *fp; |
| + | int size, memofs, filofs; |
| + | |
| + | |
| + | ・・・あれ? この、script関数内だけじゃないか!!!!~ |
| + | だったらさぁ。こうやって、script関数の引数に、buf0のアドレス(ポインタ)を渡してあげればそれでいいんじゃないの?? |
| + | |
| + | const int script(char *opt, char *inp, char *out, char *helmes_buf) |
| + | /* スクリプトが4KBを超えたら死にます */ |
| + | { |
| + | |
| + | unsigned char *buf = helmes_buf + 4 * 1024, *scr0 = helmes_buf, *scr1, *s, *s1; |
| + | FILE *fp; |
| + | int size, memofs, filofs; |
| + | |
| + | COLOR(blue){うぎゃあぁぁぁぁぁぁぁぁぁぁぁぁ!!!!! 動いた! OSASKがうごいたぞおぉぉぉぉ!!!!!} |
| + | |
| + | *誰かCに詳しい人検証してくれww [#x4f02bf0] |
| + | |
| + | #ref(osalink1_src_1.2.zip) |