memo:110508

includeとか宣言とかエラー処理とか無視してものすごいコードの概略だけ書くと

char *c[3] = {"asdf","fdsa","yeye"};
FILE *f;
f = fopen("data","wb");
fwrite(c, sizeof(char), 3, f);
fclose(f);
(ここで適当にcを書き換える)
f = fopen("data","rb");
fread(c, sizeof(char), 3, f);
fclose(f);
(適当にループさせてcの内容出力)

とかやるとcが2番目までしか読まれない。どこがおかしいんでしょ。

追記

解決したよ!時間ないので詳細はあとで書く

追記の追記

あーもうこんな素人丸出しなコード出しちゃ駄目じゃんもう!
PHPとかPerlとか刺さらない言語ばっかり使ってた結果がこれだよ!(違
# PerlはともかくとしてPHPは…
とりあえず周りの人はこんな素人なコード書かないよとだけいって他の方の名誉を守ることにしておきます。誰からだよ。


とりあえず書き直すならこうやる:

char *c[3] = {"asdf","fdsa","yeye"};
FILE *f;
f = fopen("data","w");
// バイナリじゃなくてもいい気がする
for(i ... ){
// めんどいからループ条件省略!
  fwrite(c[i], strlen(c[i]), 1, f);
}
fclose(f);
}

…とやるんだけどこうすると読み出しのときに長さが一定じゃないため正しく読み出せない。
固定長を仮定してstrlen(c[i])の部分に固定の長さを入れてもいいけどそうじゃない場合はfprintf/fscanfで拾ってあげるのが素直でよいか。というかそれのほうが他の場合でも使えるか。


…しかし端末室の利用マナー(音声だだ漏れとか飲み物持ち込んだりとか)が悪い時間みたいですね。ぶっ壊しても自業自得ですけどさすがに音楽だだ漏れはどうかと思うんですが。