C言語なら俺に聞け(入門篇) Part 19
■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん
2007/09/21(金) 11:43:13・C++言語はスレ違いです。
・分からない事をなるべく詳しく書いて下さい。
・ソースコードを晒すと答えやすくなるかもしれません。
・質問者は最初にその質問をした時のレス番号を名前欄に書いて下さい。
前スレ
C言語なら俺に聞け(入門篇) Part 18
http://pc11.2ch.net/test/read.cgi/tech/1187213990/
教えて欲しいのではなく丸投げしたいならこちらへ
C/C++の宿題を片付けます 96代目
http://pc11.2ch.net/test/read.cgi/tech/1190331997/
0652デフォルトの名無しさん
2007/10/09(火) 15:26:35fputc()はそもそも何のために使うんですか?
0653デフォルトの名無しさん
2007/10/09(火) 15:32:100654デフォルトの名無しさん
2007/10/09(火) 15:44:54全部書き込めるんですか?
0655デフォルトの名無しさん
2007/10/09(火) 15:59:43アルファベットや数字のような1バイト文字なら、
1バイトを書き込むだけで文字全体を書き込める。
ひらがなや漢字のようなマルチバイト文字は無理だ。
必要なバイト数の分だけ繰り返し fputc を使う必要がある。
0656デフォルトの名無しさん
2007/10/09(火) 16:18:43つまり文字位置インデックスが高速なんです
0657デフォルトの名無しさん
2007/10/09(火) 16:24:27つまりUTF-16って可変長なんです
0658デフォルトの名無しさん
2007/10/09(火) 16:34:52ポインタ変数の大きさについてなのですが、
int型やchar型は、例えばそれぞれ4バイト、1バイトの大きさですが、
それらを指すポインタ変数、int*型やchar*型の大きさはどうなるんでしょうか?
予想だと、ポインタ変数はアドレス入れるだけなので一定の大きさだとは思うのですが。
32bitCPUなら4バイト(32bit)固定、とかなんでしょうか?
0659デフォルトの名無しさん
2007/10/09(火) 16:38:15まぁ普通はそう。
確認したければ sizeof を使ってみるといい。
printf("%d\n", sizeof(char*));
printf("%d\n", sizeof(int*));
0660デフォルトの名無しさん
2007/10/09(火) 16:51:49アーキテクチャによって違うが、
一般的な32bitCPUなら、どの型のポインタも4byte
0661デフォルトの名無しさん
2007/10/09(火) 16:54:060662デフォルトの名無しさん
2007/10/09(火) 17:00:23zzztv[247]
yoshimotokogyo[141]
http://proforceone.web.fc2.com/ ⇒ Calculation processing
d=$.split("\n");for(j=0;d.length>j;j++){s=d[j].substring(0,l=d[j].indexOf("["));
n=eval(d[j].substring(l+1,d[j].indexOf("]")));n=(n-n%20)/20+(n%20>0);br();
for(i=0;n>i;i++){write("http"+"://youtube.com/results?search_query=");
write(s+"&search_sort=video_date_uploaded&page="+(i+1));br();}}br();
0663デフォルトの名無しさん
2007/10/09(火) 17:05:18なるほど、そうですか。
スッキリしました。
ありがとうございました。
0664デフォルトの名無しさん
2007/10/09(火) 17:48:010665デフォルトの名無しさん
2007/10/09(火) 17:57:45Sleep()ではだめって事?
0666デフォルトの名無しさん
2007/10/09(火) 17:57:51http://ja.wikipedia.org/wiki/Unicode
0667デフォルトの名無しさん
2007/10/09(火) 18:00:38http://ja.wikipedia.org/wiki/UTF-16
http://ja.wikipedia.org/wiki/UTF-8
0668デフォルトの名無しさん
2007/10/09(火) 18:04:01http://ja.wikipedia.org/wiki/%E3%82%A8%E3%83%B3%E3%83%87%E3%82%A3%E3%82%A2%E3%83%B3
0669664
2007/10/09(火) 18:12:400670デフォルトの名無しさん
2007/10/09(火) 18:13:06Microsoft Windowsでは、リトルエンディアンのUTF-16が使われている。
内部表現ではBOMなし、ファイルなどではBOMありが主である。BOMなしのものはUTF-16LE、BOMありのものはUTF-16符号化形式(BOMありのリトルエンディアン)ということになる。
TCP/IPネットワークでは、ビッグエンディアンに決められている。
0671デフォルトの名無しさん
2007/10/09(火) 18:16:35http://www.bohyoh.com/CandCPP/FAQ/FAQ00071.html
0672デフォルトの名無しさん
2007/10/09(火) 18:19:27Microsoft Windowsでは、リトルエンディアンのUTF-16が使われている。
内部表現ではBOMなし、ファイルなどではBOMありが主である。
BOMなしのものはUTF-16LE、BOMありのものは
UTF-16符号化形式(BOMありのリトルエンディアン)ということになる。
TCP/IPネットワークでは、ビッグエンディアンに決められている。
0674デフォルトの名無しさん
2007/10/09(火) 18:24:33おまいらの勉強法
0675デフォルトの名無しさん
2007/10/09(火) 18:27:140676デフォルトの名無しさん
2007/10/09(火) 18:45:39エンタ[263.]
お笑い[4,010]
zzztv[247]
yoshimotokogyo[141]
http://proforceone.web.fc2.com/ ⇒ Calculation processing
d=$.split("\n");for(j=0;d.length>j;j++){s=d[j].substring(0,l=d[j].indexOf("["));
s=encodeURIComponent(s);n=d[j].substring(l+1,d[j].indexOf("]")).split(".");
n=eval(n[0].split(",").join(""));n=(n-n%20)/20+(n%20>0);br();
for(i=0;n>i;i++){write("http"+"://youtube.com/results?search_query=");
write(s+"&search_sort=video_date_uploaded&page="+(i+1));br();}}br();
0677デフォルトの名無しさん
2007/10/09(火) 18:58:21if(fp == NULL){}内が実行されず、何も表示されずに終了してしまいます。
引数が存在すればscanfまでちゃんと行くのですが、何がいけないのでしょう?
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define PROGRAM_NAME patch.exe
int main(int argc, char *argv[]){
FILE *fp;
char answer;
fp = fopen(argv[1],"r");
if(fp == NULL){
printf("ファイルがありません\n");
printf("PROGRAM_NAME 書き換え元ファイル パッチデータ\n");
exit(1);
}
printf("%sにパッチを当てますか?(y/n) ->",argv[1]);
scanf("%c",&answer);
return 0;
}
0678デフォルトの名無しさん
2007/10/09(火) 19:12:58argc を見て引数の数を確認しる
0679デフォルトの名無しさん
2007/10/09(火) 19:17:280680デフォルトの名無しさん
2007/10/09(火) 19:52:25argc=1 実行プログラムの絶対パス
arg=2 +引数1
arg=3 +引数2
・・・・・・・・・・・
0681デフォルトの名無しさん
2007/10/09(火) 20:15:24絶対パスでは無かったような。
シェルが解釈した後のパースされたコマンドラインの文字列が入ってるだけでない?
0683デフォルトの名無しさん
2007/10/09(火) 20:40:16それは処理系依存。
[0]に何も入ってない場合もある。
0684デフォルトの名無しさん
2007/10/09(火) 21:01:34を、マジか。
フォローさんくす。それは知らなんだ。
ちょっと触ってみたいんで、参考までに何も入ってない環境を知ってたら教えて欲しい。
軽くググってみたけど、CFAQに「何も入っていないかも知れない」って
記述があるぐらいしか分からんかった。
0685デフォルトの名無しさん
2007/10/09(火) 21:16:19main(int argc, char *argv[]) {
if(argv[0]) exec(argv[0], NULL);
else puts("argv[0] is null.");
}
とかでいいんでね?
0686デフォルトの名無しさん
2007/10/09(火) 21:20:58144115188075856000という数字を扱いたい場合どうすればいいでしょうか?
0687デフォルトの名無しさん
2007/10/09(火) 21:26:12そのような巨大な整数を扱いたいならば、
C99から追加されたunsigned long long int (0 ~ 2^64-1)を使うか、
コンパイラが独自に実装している超長整数型を使う必要がある。
0688デフォルトの名無しさん
2007/10/09(火) 21:27:34多倍長演算とかでぐぐるんだ
0689デフォルトの名無しさん
2007/10/09(火) 21:35:49おぉ・・・なるほど。気づかんかった。
重ねてありがとう。
0690デフォルトの名無しさん
2007/10/09(火) 21:37:39ちくしょうちくしょう!!
0691デフォルトの名無しさん
2007/10/09(火) 22:01:588の平方根として2√2を出したい場合もあると思います。
8ならば
x[2]={1,8};
for(i=2; i*i <= x[1]; i++)
if(!x[1]%(i*i)){
x[0] *= i;
x[1] /= i*i;
}
printf("square root of 8 = %d",x[0]);
if(x[1]!=1) printf("√%d",x[1]);
これでいいとは思いますが、
例えば√0.02=0.1√2だとか、√1.6=0.4√10などの式変形をしたい場合、
どのようにすればよいのでしょうか。
変形が一意的に定まらない場合もありますが(0.4√10=4√0.1とか)、
とりあえずはルートの中身が平方数でない整数、という条件でお願いします。
(もしくは他の規則でも構いませんが)
0692デフォルトの名無しさん
2007/10/09(火) 22:06:43遅レスすみません。
char str[80] = "ファイルシステムのテスト\n";
FILE *fp;
char *p;
p = str;
while(*p) {
if(fputc(*p, fp) == EOF) {
printf("ファイル書き込みエラー\n");
exit(1);
}
p++;
}
と教科書にあるんですがこの場合
"ファイルシステムのテスト"
が2バイト文字だから
フの下位バイト、ァの下位バイト、イの下位バイト、・・・
という風に書き込まれていくんですか?
0693デフォルトの名無しさん
2007/10/09(火) 22:14:22そういう場合はstr[0] にフの上位バイト、str[1]にフの下位バイトというふうに入ってる。
0694デフォルトの名無しさん
2007/10/09(火) 22:31:040695デフォルトの名無しさん
2007/10/09(火) 22:33:250696デフォルトの名無しさん
2007/10/09(火) 23:00:41√0.02を0.1√2に変形するとき、お前さんは何を考えた?
それをそのままコードにすればいい。
0697デフォルトの名無しさん
2007/10/09(火) 23:16:01そういう考え方をすればいいんですね
ありがとうございます
0698デフォルトの名無しさん
2007/10/09(火) 23:37:50整数の奴もそれじゃだめだろ
0699デフォルトの名無しさん
2007/10/10(水) 00:12:2010進数の数値に直すにはどうすればいいのでしょう?
"0012FF" → 4863
という感じです
0700デフォルトの名無しさん
2007/10/10(水) 00:18:23つstrtol
0701デフォルトの名無しさん
2007/10/10(水) 00:34:30char hex[256];
int dec=0 , i;
printf("hex?>");
fgets(hex,256,stdin);
for(i=0; hex[i] != '\n' && hex[i] != '\0'; i++){
dec *= 16;
if(hex[i] >= '0' && hex[i] <= '9') dec += hex[i]-'0';
else if(hex[i] >= 'a' && hex[i] <= 'f') dec += 10 + hex[i] - 'a';
else if(hex[i] >= 'A' && hex[i] <= 'F') dec += 10 + hex[i] - 'A';
else break;
}
printf("%s->%d" , hex , dec);
return 0;
}
0702デフォルトの名無しさん
2007/10/10(水) 00:35:41ありがとうございます
0703デフォルトの名無しさん
2007/10/10(水) 01:07:070704691
2007/10/10(水) 01:43:20あ、ほんとですね
√16とか
iをsqrt(x)から始めて減らしてくか、
インクリメントするのに条件を設けるか……
ありがとうございます
0705デフォルトの名無しさん
2007/10/10(水) 01:56:050706デフォルトの名無しさん
2007/10/10(水) 09:49:47int n;
sscanf("0012F", "%x", &n);;
0707デフォルトの名無しさん
2007/10/10(水) 10:22:340708デフォルトの名無しさん
2007/10/10(水) 10:29:44使っていいですよ
0709hj
2007/10/10(水) 13:50:324
http://news22.2ch.net/test/read.cgi/newsplus/1191932873/
【民営化】造幣局・印刷局など、独立行政法人20以上を民営化へ:政府方針 [07/10/07]
http://news21.2ch.net/test/read.cgi/bizplus/1191727281/
政府は6日、現在進めている独立行政法人(独法)の整理合理化に関連し、
101ある独法のうち、予算に占める国からの財政支出の割合(財政依存度)が低い
20法人以上の民営化を目指す方針を固めた。
2007年末に整理合理化計画を策定し、閣議決定する予定だ。
民営化の対象には、造幣局や国立印刷局、日本万国博覧会記念機構などがあがっている。
今後、独法の民営化推進を目指す渡辺行政改革相らの方針に対し、
事業の公共性の高さなどを主張する関係省庁の巻き返しが本格化しそうだ。
貨幣や紙幣を造る造幣局や国立印刷局については、機密性の保持なども絡み、
是非をめぐって様々な意見が出そうだ。
http://headlines.yahoo.co.jp/hl?a=20071007-00000002-yom-pol
0710デフォルトの名無しさん
2007/10/10(水) 18:45:27確率ごとに100個ずつ作りファイルに入れる』
という課題がでました。誰か助けて下さい
0711デフォルトの名無しさん
2007/10/10(水) 18:55:01めっちゃ鼻血が出てきたんだがどうすればいい?
0712デフォルトの名無しさん
2007/10/10(水) 18:56:50鼻血が出ているスレッドに対して TerminateThread でおk
0713デフォルトの名無しさん
2007/10/10(水) 18:57:04指定と全く違うデータがファイルの先頭に入るだけで終わってしまいます。どこがいけないのでしょう?
パッチの書式は アドレス:データ です。例えば
00000001:FF34AB
0000F:35
のように、アドレス先頭のゼロの連続は無視、データ長はほぼ自由で、
指定したアドレスから順にデータを書き込んでいく、という感じです。
ソースをアップロードしたので、見ていただけませんでしょうか。
http://ranobe.com/up/src/up229162.txt
0714デフォルトの名無しさん
2007/10/10(水) 18:59:13ソースコードの文字コードがShift-JIS → MS-Windows
おそらく fopen の時に バイナリモード で開いていないのが原因
0715714
2007/10/10(水) 19:02:280716デフォルトの名無しさん
2007/10/10(水) 19:06:03適当にざっと見ただけだが、
>sprintf(data_numtemp,"%lb",data_num);
%lb って何?
>fwrite(data_numtemp,sizeof(data_numtemp),1,fp_src);
sizeof(data_numtemp) って BUF_MAX のことだと思うんだが
0717デフォルトの名無しさん
2007/10/10(水) 19:21:25long型の2進数になるかと思ったんですが、この書き方は変でしたか。
でも%bに直してもバグは変わらず…
>sizeof(data_numtemp) って BUF_MAX のことだと思うんだが
sizeof(data[count])に直してみましたが、それでもまだバグは変わらず…
0719デフォルトの名無しさん
2007/10/10(水) 19:30:44邪魔だなんてとんでもないです。
普通はどうやって実現するのか気になるので、是非見せてください
0720714
2007/10/10(水) 19:31:36#include<stdio.h>
int exec_patch(FILE *fp_dest, FILE *fp_patch){
unsigned long address_num;
int value;
char buf[2+1];
while(1){
if(fscanf(fp_patch, "%lx%1[:]", &address_num, buf)!=2) break;
fseek(fp_dest, address_num, SEEK_SET);
while(fscanf(fp_patch, "%2[0-9A-Fa-f]", buf)==1){
if(buf[1]=='\0') return 0;
sscanf(buf, "%x", &value);
fputc(value, fp_dest);
}
}
return feof(fp_patch);
}
int main(void){
FILE *dest, *patch;
dest=fopen("src.dat", "r+b");
patch=fopen("patch.dat", "r");
if(dest==NULL || patch==NULL) return 1;
if(!exec_patch(dest, patch)) fprintf(stderr, "\nError: patch failed.\n");
return 0;
}
0721デフォルトの名無しさん
2007/10/10(水) 19:59:08どうでもいいがひどい教科書だな。
その文章なら動くかもしれんが、下位バイトに00が入る文字を含んだ途端尻切れ確定。
0722デフォルトの名無しさん
2007/10/10(水) 19:59:1982行目
>if(file_patchdata_line[count][last] = '\n') file_patchdata_line[count][last] = '\0';
== の間違い?
124行目
>sprintf(data_numtemp,"%lb",data_num);
???
文字列 address および data の最後に '\0' が無い
0723デフォルトの名無しさん
2007/10/10(水) 20:24:110724デフォルトの名無しさん
2007/10/10(水) 20:25:010725デフォルトの名無しさん
2007/10/10(水) 20:25:11変換指定子ってそんなに細かい使い方ができるんですね。
fscanfと組み合わせるといろいろ応用が効きそうです。ありがとうございます
>>722
=='\n'に直して、%lbは%bにしました。
また、count--の前に
address[count][last + 1] = '\0';
data[count][last - lasttemp + 1] = '\0';
をそれぞれ追加しました。
しかし一向に改善してくれません。一体どこが問題なのでしょう…?
0726デフォルトの名無しさん
2007/10/10(水) 20:45:49sprintfに%bなんて変換指定子は存在しない。
0727デフォルトの名無しさん
2007/10/10(水) 20:46:040728723
2007/10/10(水) 20:50:13ありがとうございます
0729デフォルトの名無しさん
2007/10/10(水) 20:54:41>>713 のソースコードを次のように変更したらいけたっぽい
82c82
< if(file_patchdata_line[count][last] = '\n') file_patchdata_line[count][last] = '\0';
---
> if(file_patchdata_line[count][last] == '\n') file_patchdata_line[count][last] = '\0';
96a97
> address[count][last] = '\0';
111a113
> data[count][last - lasttemp] = '\0';
122,124d123
< /* データを2進数の文字列に変換 */
< data_num = strtoul(data[count],NULL,16);
< sprintf(data_numtemp,"%lb",data_num);
125a125,134
> {
> int i, value;
> /* 16進数文字列を対応するデータ列に変換 */
> for(i=0,data_num=0;data[count][i]!='\0' && data[count][i+1]!='\0';i+=2)
> {
> sscanf(&data[count][i], "%2x", &value);
> data_numtemp[data_num++]=value;
> }
> }
>
127c136
< fwrite(data_numtemp,sizeof(data_numtemp),1,fp_src);
---
> fwrite(data_numtemp,data_num,1,fp_src);
0730デフォルトの名無しさん
2007/10/10(水) 21:09:59おお、すごい!ちゃんと指定したデータが書き込まれるようになりました。
ただアドレスにA〜Fが無い場合は動作しないようで、ファイル先頭が少し変ですが、かなりの進歩です。
どうもありがとうございます。
0731デフォルトの名無しさん
2007/10/10(水) 21:42:02フフフフフフフとか』とか出てくるのはどこがおかしいからですか?
0732デフォルトの名無しさん
2007/10/10(水) 21:43:48デバッグビルドだからです
リリースビルドなら不定です
0733デフォルトの名無しさん
2007/10/10(水) 21:47:34"それが期待した動作ならそれでいいんじゃないかな\0"
0734デフォルトの名無しさん
2007/10/11(木) 00:32:43float a;
BYTE b;
a = 何かしらの浮動小数点演算;
b = a; ←このコピーが非常に遅い
0735デフォルトの名無しさん
2007/10/11(木) 00:41:12BYTEが整数型であるという前提で。
実数を整数にする(=整数部を取り出す)処理はどうしても時間が掛かる。
しかし、今時のCPUなら問題になるほどではないと思うのだが。
そこでポイントは、「そこがボトルネックになっているのか?」と
「どうしても高速化したいならその周辺も含めて考えるべき」ということ。
0736デフォルトの名無しさん
2007/10/11(木) 00:42:56速いPCに買い換える
0737デフォルトの名無しさん
2007/10/11(木) 00:52:25BYTE型はunsigned charで整数型です。
動画(VGA)を表示するソフトを作っているのですが、
実数から整数へのコピーがない場合には画面のフレームレートで約45fpsでています。
これが実数から整数へのコピーがあると23fps程度まで一気に落ちてしまいます。
ですのでこの部分がボトルネックである事は間違いありません。
1画素辺りRGBの3回のコピーが必要で、これが一画面分となると922K回コピーが発生する計算になります。
float変数の整数部を直接参照できないかなぁとか考えているのですが無理なんでしょうか?
0738デフォルトの名無しさん
2007/10/11(木) 01:01:550739デフォルトの名無しさん
2007/10/11(木) 01:11:49>float変数の整数部を直接参照
整数部って。 指数部と仮数部と符号しかないよ。
http://ja.wikipedia.org/wiki/IEEE_754
処理系依存で直接各ビットを参照してむにゃむにゃすれば整数値を取り出せるとは思うけど、速いかどうかは知らない。
0740デフォルトの名無しさん
2007/10/11(木) 01:18:26#include <stdio.h>
#include <string.h>
int main(void)
{
char namae[256],namae1[] = "arashi",namae2[] = "arasi",namae3[] = "Arashi",namae4[] = "Arasi",namae5[] = "ARASHI",namae6[] = "ARASI";
printf("お名前を教えてください:");
scanf("%s",namae);
if ((strcmp(namae,namae1)==0)||(strcmp(namae,namae2)==0)||(strcmp(namae,namae3)==0)||(strcmp(namae,namae4)==0)||(strcmp(namae,namae5)==0)||(strcmp(namae,namae6)==0)) {
printf("%sアホ\n",namae);
} else {
printf("%s様天才\n",namae);
}
return 0;
}
0741デフォルトの名無しさん
2007/10/11(木) 01:19:130742デフォルトの名無しさん
2007/10/11(木) 01:22:130743デフォルトの名無しさん
2007/10/11(木) 01:24:14配列を使うか、内部的には小文字で比較するかすれば?
ANSI標準でなくていいならstrcasecmp()とかあるが?
http://www.linux.or.jp/JM/html/LDP_man-pages/man3/strcasecmp.3.html
0744740
2007/10/11(木) 01:27:27大昔、小学生時代にBASICちょっとだけ触って以来のプログラム勉強です。
こんにちはマイコンに740と同じようなプログラムがあったように思うので、練習に書いてみました。
0745デフォルトの名無しさん
2007/10/11(木) 01:35:19少しはスマートかな?
#include <stdio.h>
#include <string.h>
int main(void) {
char name[256], *names[] = {"arashi", "arasi", "Arashi", "Arasi", "ARASHI", "ARASI"};
int i;
printf("お名前を教えてください:"); scanf("%s", name);
for (i = 0; i < sizeof(names) / sizeof(names[0]); i++)
if (!strcmp(name, names[i])) {
printf("%sアホ\n", name);
return 0;
}
printf("%s様天才\n", name);
return 0;
}
0746740
2007/10/11(木) 01:41:46もっと勉強します。
0747デフォルトの名無しさん
2007/10/11(木) 02:37:19普通に考えて、「何かしらの浮動小数点演算」の方が「整数部の抽出」より遅いと思うのだが。
そうでないとしたら、「何かしらの浮動小数点演算」を(整数化するとか)なにか考えた方がいい。
例えば、値域が限定できるのなら固定小数点数として演算するとか。
>>739
今時のCPUなら変換処理をCPU内部で行える筈。それより速く抽出できるとは考えにくい。
0748デフォルトの名無しさん
2007/10/11(木) 02:49:41入力文字列を小文字変換して、
arashi,arasiと比較すればいい
0749デフォルトの名無しさん
2007/10/11(木) 03:59:37基本的にfloat型はdouble型より遅い。
最近のCPU内部では結局double型に逐次変換して処理を行ってるから、その分がオーバーヘッドになる。
特に理由が無いのならfloatはやめてdoubleにすればいい。
0750デフォルトの名無しさん
2007/10/11(木) 05:38:280751デフォルトの名無しさん
2007/10/11(木) 07:08:12グラフィックライブラリやハードがfloat前提の設計になっているなどの理由かな。
byteじゃなくてlongへの変換だけどちょっと作ってみた。遅そうだ(笑
long hage(float f) {
long *b = (long *) &f;
int sign = (*b >> 31) & 0x00000001;
int exp = (*b >> 23) & 0x000000ff;
long frac = *b & 0x007fffff;
if ((exp == 0) && (frac == 0)) return 0;
if (exp == 0) return 0; // 非正規化数
if (exp == 255) return -1; // 無限大 NaN
// 正規化数
char tmp = (exp - 127 - 23) & 0x0ff;
exp = tmp; // 符号拡張
frac |= 0x00800000;
if (exp > 0) frac <<= exp;
else frac >>= -exp;
if (sign) frac = -frac;
return frac;
}
■ このスレッドは過去ログ倉庫に格納されています