サイトトップへ
OSASK.NET
  サイトトップへ       新掲示板(閉鎖済)   Wiki(凍結済)   旧掲示板(廃止済)   ニュース(廃止済)  
7: 2010-01-17 (日) 16:36:45 lina ソース 現: 2024-01-08 (月) 12:58:58 lina ソース
Line 214: Line 214:
    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--){
Line 220: Line 220:
        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) {
Line 227: Line 227:
・・・やっぱだめだなぁ・・・orz ・・・やっぱだめだなぁ・・・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)

トップ   差分 バックアップ 複製 名前変更 リロード印刷に適した表示   ページ新規作成 全ページ一覧 単語検索 最新ページの一覧   ヘルプ
新着

目次
メンバー一覧


最新の20件
2016-10-01 2016-09-08
  • @MenuBar.
2016-09-07 2016-09-04 2016-08-15 2015-09-23 2014-07-30 2014-07-04 2014-02-04 2013-10-26 2013-06-21 2013-06-17 2013-06-15 2013-04-02 2013-02-09 2013-02-04 2012-12-25 2012-12-01 2012-05-28 2012-03-31

トピック一覧
一般用コメント最新
新掲示板lina
2016/9/5 20:58
SandBoxゲスト
2016/9/4 12:01
RecentDeletedlina
2015/6/2 19:29
Old-OSASK-MLlina
2014/6/29 9:14
hideyosi/メールhideyosi
2014/1/6 20:17
hideyosi/募集中lina
2013/11/8 19:56

このサイトは川合秀実から委託を受けて、OSASKコミュニティによって管理・運営されています。