6: 2010-01-17 (日) 11:58:34 lina |
現: 2024-01-08 (月) 12:58:58 lina |
| | | |
| さーて。乱暴者のオラはこれでOSASKをコンパイルしてみようwwww | | さーて。乱暴者のオラはこれでOSASKをコンパイルしてみようwwww |
| + | |
| + | ダメか・・・ |
| + | |
| + | どうも、fgetsだと改行コードが入り込むらしい。そんならってんで、こんな改行コード抜きを載せてみる。 |
| + | |
| + | for (i = 0; fgets(fname,32,fp0) != NULL; i++) { |
| + | |
| + | //改行コードの引っこ抜き |
| + | for ( i2 = 31; i2 != 0; i2--){ |
| + | if ( fname[i2] == 0x0a ) fname[i2] = 0; |
| + | if ( fname[i2] == 0x0d ) fname[i2] = 0; |
| + | } |
| + | |
| + | fp1 = fopen(fname, "rb"); |
| + | if (fp1 == NULL) { |
| + | err1: |
| + | fclose(fp0); |
| + | |
| + | ・・・やっぱだめだなぁ・・・orz |
| + | |
| + | わからんなぁ・・・・・・。こうしてみると・・・ |
| + | strcpy (fname,"base.exe"); osalink.optの一行目 |
| + | fp1 = fopen(fname,"rb"); |
| + | if (fp1 != NULL){ |
| + | fprintf(stderr, "testOpenOK!\n", fname); ちゃんとオープンが成功してくれる! |
| + | fprintf(stderr, "nagasa=%d\n", strlen(fname)); 長さは8と表示される |
| + | fclose(fp1); |
| + | } |
| + | |
| + | // for (i = 0; fscanf(fp0, " %s", fname) == 1; i++) { |
| + | for (i = 0; fgets(fname,32,fp0) != NULL; i++) { |
| + | |
| + | //改行コードの引っこ抜き |
| + | for ( i2 = 31; i2 != 0; i2--){ |
| + | if ( fname[i2] == 0x0a ) fname[i2] = 0x0; |
| + | if ( fname[i2] == 0x0d ) fname[i2] = 0x0; |
| + | } |
| + | |
| + | fp1 = fopen(fname, "rb"); |
| + | if (fp1 == NULL) { |
| + | err1: |
| + | fclose(fp0); |
| + | fprintf(stderr, "Can't openaaa \"%s\".\n", fname); オープンに失敗する |
| + | fprintf(stderr, "nagasa=%d\n", strlen(fname)); 長さも同じ8。 |
| + | return 1; |
| + | } |
| + | |
| + | なぜ読み込んで改行抜きをした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) |