トップページ⇒tech
1001コメント357KB

C言語なら俺に聞け(入門篇) Part 3

■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん2006/10/13(金) 04:55:50
C言語の入門者向け解説スレです。

前スレ
C言語なら俺に聞け(入門篇) ぱぁと2〜
http://pc8.2ch.net/test/read.cgi/tech/1153818463/

過去スレ
Part 1 http://pc8.2ch.net/test/read.cgi/tech/1146700389/


関連スレ
くだすれC言語(初心者用)
http://pc8.2ch.net/test/read.cgi/tech/1153542424/

【ISO/ANSI/JIS】 C言語なら俺に聞け! Part 130
http://pc8.2ch.net/test/read.cgi/tech/1159613789/
01531412006/10/20(金) 09:02:07
>>145
staticはローカル変数の中でも配列の内容を静敵領域に抑えておく使い方が理想的ってことでしょうか?
文字列定数は静敵領域に確保されると他の本で読んだので、そんなに変わらないように思えたんです
一応もうちょっと先まで進んでるんですが、未だに飲み込めない箇所で…
0154デフォルトの名無しさん2006/10/20(金) 09:53:35
そのstaticの使い方は、静的領域確保とスコープ制限(その関数内のみアクセス)
の2つの意味を兼ねているけど、これを同じに考えてごっちゃにしてないか?
>>153のそれも理想的な使い方の一つ。
>>141 初期化しなくても済むってのも同じく使い方の一つ(これは
初期値が代入する規約からの副次効果に過ぎないけど、応用例ではある)。

char *ptr="abc"
char arr[]="abc"
記憶領域確保からすればまったく別物だけど、
これも曖昧ならK&R読むのはまだ早いんじゃないか?
構造体のところは辛いぞ。
01551412006/10/20(金) 10:15:06
>>154
あ、すみませんnameがポインタの配列だってことを忘れていました…
>>141だと文字列長がバラバラで配列で定義すると冗長な部分が出来るから
それぞれへのポインタを配列に格納した方がよくて、その領域を留めるためのstatic、ということですか
0156デフォルトの名無しさん2006/10/20(金) 11:59:20
>>155
文字列長とか配列定義とかは、staticと関係ないな。
K&RはCの理解が曖昧だと難しいから、
それよりも初心者本を読み返すのがいいだろう。
もしくは、C FAQでstatic, array, pointer の違いを理解してみろ。
考えるのは、それからでも遅くはないだろう。
0157デフォルトの名無しさん2006/10/20(金) 12:29:38
>>152なら、ポインタの配列にしないで配列の配列にしたほうがメモリ効率はよさそうだが。
#どうせ
0158デフォルトの名無しさん2006/10/20(金) 12:33:37
む、抜けたか?

>157の最後の行をもう一度。
#どうせ、長くなることもないし。
0159デフォルトの名無しさん2006/10/20(金) 12:43:44
>>157
メモリ効率って何のこと?
知ったかぶりじゃないよね。
01601412006/10/20(金) 13:18:05
>>156
理想的という表現が引っ掛かってましたが確かに有効だと思えてきました
もう一度他で復習し直してみます、ありがとうございました
0161デフォルトの名無しさん2006/10/20(金) 15:17:00
素直でよろしい
0162157-1582006/10/20(金) 15:38:19
>>159
単純にポインタの配列だとポインタの分だけ余計にメモリを食うという話。
どっちみち、文字列分のメモリは消費するのだから。
長さが変わる(この場合より長くなる)場合は、隙間ができるから微妙になるけど。
0163デフォルトの名無しさん2006/10/20(金) 18:06:18
まぢれすごくろう。
0164デフォルトの名無しさん2006/10/21(土) 20:31:48
質問なのですが、置換されたファイルなどは
ようするに書き出しとかでできた、ファイル(aaa.c→aaa.c_)
これで "_" と言うのが付いたファイルができました
参考書に依ると開いて確認しましょうとなっているのですが
開けません・・・・
0165デフォルトの名無しさん2006/10/21(土) 20:57:51
拡張子をtxtなりなんなり適当に直せ
0166デフォルトの名無しさん2006/10/21(土) 21:05:27
>>165
ありがとうございます、
自分で直せばいいのですね!!!
0167デフォルトの名無しさん2006/10/21(土) 22:45:15
このスレはいつからWindows操作質問スレ(初心者編)になりやがりましたか?
0168デフォルトの名無しさん2006/10/21(土) 23:16:07
>>167
 このスレができる前から、「入門以前」の書き込みは
しばしば見られたからなぁww

「C言語なら俺に聞け(エディタすら使えない人篇)」とか作るか?
もはやC言語でもなんでもないが・・・
0169デフォルトの名無しさん2006/10/22(日) 03:16:36
ぜひお願いします
0170デフォルトの名無しさん2006/10/22(日) 09:41:39
それやる位なら初心者板にあるみたいな超初心者向けエスパースレの方が隔離スレとしてはいい気がする
ム板にどれくらいエスパーがいるのか知らんが
0171デフォルトの名無しさん2006/10/22(日) 10:34:34
プログラム「燃えよドラゴンズ」

最初に打者8人分の名前を入力して置いて、
それから燃えよドラゴンズの歌詞につなげたい。

例:

荒木、井端、立浪・・・・(以下略)と入力すると、

表示される内容:

1番荒木が塁に出て
2番井端がヒットエンドラン
3番立浪タイムリー
・・・・(以下略)

このような場合はstrcatを使うべきか・・・・
それとも普通のニ次元配列で・・
0172デフォルトの名無しさん2006/10/22(日) 11:03:18
>>171
正直、そういうのはスクリプト言語でやるのが手っ取り早い。
つーか、そこでstrcat()云々なんて言い出すようじゃ、到底無理。
0173デフォルトの名無しさん2006/10/22(日) 13:37:12
>>172
スレタイ読め
>>171
それだけじゃどっちでもいいとしか言いようが無い
0174デフォルトの名無しさん2006/10/22(日) 13:56:17
>>173
スレタイくらい承知の上で敢えて、「無理」と言っている。
現にあんただって(質問が悪すぎて)まともに回答できないじゃないか。
0175デフォルトの名無しさん2006/10/22(日) 13:57:38
はて、俺には>>173が的確な回答に見えてしょうがないんだが。
0176デフォルトの名無しさん2006/10/22(日) 14:00:48
二次元配列とstrcat()は排他なのか?
0177デフォルトの名無しさんNGNG?2BP(204)
二次元配列で処理するって、どう使うつもりなんだろ?
0178デフォルトの名無しさん2006/10/22(日) 18:27:14
>>171
printf( "1番%sが塁に出て", name[0] );

これの繰り返しで良いんじゃないか?
0179デフォルトの名無しさん2006/10/23(月) 00:11:42
printf("%d番%sが塁に出て", i, name[i]);

これの繰り返しで良いんじゃないか?
0180デフォルトの名無しさん2006/10/23(月) 00:16:26
>>178>>179
2番以降は塁にでるって文章じゃねえ
0181デフォルトの名無しさん2006/10/23(月) 00:56:17
ノリのいいツッコミありがとう
0182デフォルトの名無しさん2006/10/23(月) 01:25:04
みんな塁に出てなにが悪いというのだ
0183デフォルトの名無しさん2006/10/23(月) 01:48:12
歌の通りだったらよかったのにねぇ……
0184デフォルトの名無しさん2006/10/23(月) 04:20:09
>>171
printf("一番 %sが塁に出て", name[0] );
printf("二番 %sが送りバント", name[1] );
printf("三番 %sタイムリー", name[2] );
printf("四番 %sホームラン", name[3] );
printf("五番 %sがクリーンヒット", name[4] );
printf("六番 %sが流し打ち", name[5] );
printf("七番 %sヒットエンドラン", name[6] );
printf("八番 %sがスクイズバント", name[7] );
0185デフォルトの名無しさん2006/10/23(月) 07:01:23
printf("一番 %sが塁に出て"
"二番 %sが送りバント"
"三番 %sタイムリー"
"四番 %sホームラン"
"五番 %sがクリーンヒット"
"六番 %sが流し打ち"
"七番 %sヒットエンドラン"
"八番 %sがスクイズバント",
name[0], name[1], name[2], name[3], name[4], name[5], name[6], name[7]);
0186デフォルトの名無しさん2006/10/23(月) 07:32:40
つ改行
0187デフォルトの名無しさん2006/10/23(月) 07:34:48
name[0]〜name[7]に改行いれときゃいいんじゃね?
0188デフォルトの名無しさん2006/10/23(月) 08:53:29
#include <stdio.h>
#include <string.h>
int main(void)
{
int i,l;
char dra[8][2][25]={
{"","一番が塁に出て"},
{"","二番がヒットエンドラン"},
{"","三番タイムリー"},
{"","四番ホームラン"},
{"","五番がクリーンヒット"},
{"","六番が流し打ち"},
{"","七番ヒットエンドラン"},
{"","八番がスクイズバント"}
};
for(i=l=0;i<8;i++){
printf("%d番の選手の名前を入力してください",i+1);
fgets(dra[i][0],25,stdin);
l=strlen(dra[i][0]);
if(dra[i][0][l-1]=='\n')dra[i][0][l-1]='\0';
}
for(i=0;i<8;i++)printf("%.4s %s%s\n",dra[i][1],dra[i][0],dra[i][1]+4);
return 0;
}
0189デフォルトの名無しさん2006/10/23(月) 14:38:09
[8][2][25]
0190デフォルトの名無しさん2006/10/23(月) 20:55:35
出力ファイルとは「._」が付くやつでしょうか?
出力したのに中身は変わっていませんがいいのですかね?
0191デフォルトの名無しさん2006/10/23(月) 21:54:31
>>190
日本語でおk
01921902006/10/23(月) 22:50:39
出力ファイルの意味がわからないんです、コピーされてできたのが
そうなんでしょうか?
0193デフォルトの名無しさん2006/10/23(月) 23:04:07
>>192
大まかにいうとプログラムから出てきたのが出力ファイル。
.xxx(拡張子)が付いてようがいまいが、ファイルには違いない。
01941922006/10/23(月) 23:11:32
ありがとうございます。
入門書を読んでも出力ファイルは何に使うのか?理解しがたいです
単なるコピー?なんですかね。入門書に依れば移動するファイルとの
事です。
0195デフォルトの名無しさん2006/10/23(月) 23:37:56
Cを覚える為にはアセンブラは必須と言われました。
マジ?
0196デフォルトの名無しさん2006/10/23(月) 23:40:49
必須か?と聞かれれば
いいえと答える
0197デフォルトの名無しさん2006/10/23(月) 23:43:07
Cでオブジェクト指向は出来ないの?
0198デフォルトの名無しさん2006/10/23(月) 23:49:06
>>194
プログラムを FAX に例えよう。
ファイルというのは紙のことだ。
出力ファイルというのは、FAX から送信されて出てきた紙のことだ。

つまり、貴方の質問はこういうことになる。

「家のFAXから紙が出てきました。これは何に使うんですか?」

こちらとしては、どこから届いたのか、紙に何が書かれているか、すらわからないのに答えられるわけが無い。
0199デフォルトの名無しさん2006/10/23(月) 23:51:03
>>195
必須ではないが知識があればすんなりと理解できるところがある。
知識がないと苦労ことがあるらしい。
0200デフォルトの名無しさん2006/10/23(月) 23:58:03
>>197
言語仕様がオブジェクト指向プログラミングをするためにできていないというだけで、できないわけではない。
0201デフォルトの名無しさん2006/10/24(火) 01:04:22
質問させてください
プログラム内でchar型の変数にint型の変数を代入させるにはどうしたらいいのでしょうか
(char)hennsuu1.[data ] = (int)value;
strcpyを使ってhennsuu1に値を入れることはできるのですが
int型の変数を入れることが何故かできないのです。。。
どなたか教えてください
0202デフォルトの名無しさん2006/10/24(火) 01:07:58
char a;
int b;

a=b;
0203デフォルトの名無しさん2006/10/24(火) 01:09:10
よくわからんが、整数を文字列にしたいのなら itoa
0204デフォルトの名無しさん2006/10/24(火) 03:32:03
まぁ、sprintf()を使え。
0205デフォルトの名無しさん2006/10/24(火) 07:00:08
  、-.、._                                .__
    `ヽ、"''ー、._                       _,、-‐'" ̄/
      \   ~''ー--、__           ,,、-―''"~"~   /
        ヽ、   ,    ヾ'ヽ、__    ./'i~ ̄         ./
         \  |!   丶、\"ーェ''7 /    /   _..,,ノ
           `ヽ|`ー-、___"''ゝー<''~ ,,、-'"~i-ー''"~
                 ,,.-‐''""""'''ー-.、     
                ,ィ"          \       
               /             `、
              ,i       ,-っ hennsuu i
             /⌒ヽ'_ー-/ _).ィ‐‐-,,_  __|
             | r,i \\//-l;l : : : `l-r'"メ、
             ヾ、  \/  `ー‐'": i!_,l_ノ`   まだまだだな
              |         ,:(,..、 ;:|/.     
              |        ,,,..;:;:;:;,/      
              \ `::;;.   '"`ニ二ソ\_二つ 
                \ ゙゙:`-、;:;:;;;:;:;:;;/   
                 /  /~\ \     
                 /  /   >  )   
               / ノ    / /      
              / /   .  / ./       
              / ./     ( ヽ、        
             (  _)      \__つ 
0206デフォルトの名無しさん2006/10/24(火) 08:08:40
itoa() は標準じゃないから気をつけろ
0207デフォルトの名無しさん2006/10/24(火) 08:31:48
それ系の関数の読み方というか関数名の意味がわからず苦労した
atoiアトイ?fabsファブス?とかw
0208デフォルトの名無しさん2006/10/24(火) 09:23:19
スタジオドットエッチ
0209デフォルトの名無しさん2006/10/24(火) 12:34:36
POINT pt[300];

この場合、&pt[n](nは任意の整数0<300な)ってどういう意味だっけ?
0210デフォルトの名無しさん2006/10/24(火) 12:42:49
pt+n
0211デフォルトの名無しさん2006/10/24(火) 13:56:02
>>210さん、どうもありがとう
0212デフォルトの名無しさん2006/10/24(火) 14:56:32
ヘッダファイルでグローバル変数を宣言しようとしてるのですが、うまくいきません。
単純化したものを作ってみたのですが、それでも失敗してしまいました。
何が間違ってるのかご指導をお願いします。

/*********/
/* main.c */
/*********/

#include "myhead.h"

int main(void){
 func();
 x = x+1;
 printf("%d\n",x);
 return 0;
}

/*********/
/* func.c */
/*********/

#include "myhead.h"

void func(void){
 x = 1;
}

改行が多いと怒られたので次へつづく
0213212の続き2006/10/24(火) 14:57:02

/***********/
/* myhead.h */
/***********/

#include <stdio.h>

void func(void);

#ifndef MYHEAD_INCLUDED
#define MYHEAD_INCLUDED
#define EXTERN
#else
#define EXTERN extern
#endif
EXTERN int x;

それで、実行結果は

>bcc32 main.c func.c
Borland C++ 5.5.1 for Win32 Copyright (c) 1993, 2000 Borland
main.c:
func.c:
Turbo Incremental Link 5.00 Copyright (c) 1997, 2000 Borland
Warning: パブリックシンボル _x がモジュール C:\BORLAND\KADAI\07\DIVTEST\MAIN.OBJ と C:\BOR
LAND\KADAI\07\DIVTEST\FUNC.OBJ の両方に定義されている

となってしまいます。
よろしくお願いします。
0214デフォルトの名無しさん2006/10/24(火) 15:12:28
1 2 3
2 5 8
12 8 1
10 3 5
5 2 3

というようなデータファイルをfopenで読み込み、行ごとにテキストファイルに内容を以下のように書き換えて出力
したいと思ってます。
/***新しくdata1.txtを作り保存する***/
x1 = 1
x2 = 2
x3 = 3
/***************/

/***data2.txtも同様***/
x1 = 2
x2 = 5
x3 = 8
/***************/

/***data3.txt***/
x1 = 12
x2 = 8
x3 = 1
/***************/
・
・
・
といったように生成していきたいのですが、
何かよい方法はありますでしょうか?
0215デフォルトの名無しさん2006/10/24(火) 15:19:03
>>212
>bcc32 main.c func.c

ってやったときにmain.cでMYHEAD_INCLUDEDが#defineされるから、
次のfunc.cでは#elseが有効になると思ってる?
残念ながらならないよ。

プリプロセッサはそれぞれの.cファイルで独立して起動されるから、
どっちもMYHEAD_INCLUDEDが#defineされてない状態で起動される。
02162122006/10/24(火) 17:07:05
>>215
レスありがとうございます。

…という事は、私が望む動作は
・ヘッダファイルでは extern int x;
・main.cかfunc.cにグローバル変数として int x;
とするしかない(ほかにあったとしても回りくどい方法だけ)
という認識でOKでしょうか?
0217デフォルトの名無しさん2006/10/24(火) 18:08:45
>>216
あるいは

/*********/
/* main.c */
/*********/

#define MYHEAD_INCLUDED /* 追加。名前はもっといいの考えて */
#include "myhead.h"


のようにすればよい。名前にINCLUDEDなんてついていたら
わけがわからんので、その辺は適当に。
0218デフォルトの名無しさん2006/10/24(火) 18:10:41
あ、これじゃあちょっと駄目か。
myhead.hの#ifndefを#ifdefにした方がいいね。
これでmain.cでのみ確実にxが定義されて、
他では宣言になる。
0219デフォルトの名無しさん2006/10/24(火) 18:14:22
しかしそんな技巧は今時流行らない。
0220デフォルトの名無しさん2006/10/25(水) 05:36:34
ヘッダは宣言に使うものであって定義に使うものではありません
0221デフォルトの名無しさん2006/10/25(水) 13:00:19
char s[10];
char* p = s;
�@
p + 100;
�A
p += 100;
�B
p += 100;
*p;
どの時点で未定義ですか?
それともすべて未定義?
02222212006/10/25(水) 13:00:50
スレ間違えました
無視してください
0223デフォルトの名無しさん2006/10/25(水) 20:15:09
impossible to open chinouglと出ますが、どうすればいいんですかね?お願いします。
0224デフォルトの名無しさん2006/10/25(水) 20:35:13
ビット論理演算子の(Aは同じ関数をとる)
A^A→0
になるのは何がすごいのでしょうか・・・
何かこれに感激しないといけないらしいのですが^^;
0225デフォルトの名無しさん2006/10/25(水) 20:45:42
感激したが、すごくはないぞ。
0226デフォルトの名無しさん2006/10/25(水) 20:48:10
なくなって初めて気付くありがたみってやつですよ
0227デフォルトの名無しさん2006/10/25(水) 22:52:00
センベイって美味いか?
0228デフォルトの名無しさん2006/10/25(水) 23:16:33
これらの違いがわかりませんので
助言、お願い致します。

char str[] = "Hello!" と char key[128] = "abc"
一見、同じ意味に見えてしまうのですが、何が違うのでしょうか?
char keyだと一列が一個だけ、このように"abc"
char strだと一列を複数入れられるのでしょうか?char str[] = {"abc","def","ghi"}
なのでしょうか?
0229デフォルトの名無しさん2006/10/25(水) 23:22:17
char str[] = "Hello!"
と書くと
char str[7] = "Hello!"
とコンパイラが判断してくれる
それだけ
0230デフォルトの名無しさん2006/10/25(水) 23:27:50
>>229
??? 何か違うのでしょうか?
0231デフォルトの名無しさん2006/10/25(水) 23:29:30
違わないでしょ
0232デフォルトの名無しさん2006/10/25(水) 23:31:46
>>231
とう言うと同じなのでしょうか?
混乱してしまいます。

char keyだと一列が一個だけ、このように"abc"
char strだと一列を複数入れられるのでしょうか?char str[] = {"abc","def","ghi"}

の差ではないのでしょうか?

0233デフォルトの名無しさん2006/10/25(水) 23:39:12
char str[] = {"abc","def","ghi"} 
↑
コンパイル通らんよ

char* str[] = {"abc","def","ghi"} 
と勘違いしてない?
0234デフォルトの名無しさん2006/10/25(水) 23:41:26
>>228
前者は H e l l o ! ヌル の7文字分確保される。
後者は128文字分確保した上で、先頭から a b c ヌル の4文字が入れられる。
それだけのこと。

>>232のような差ではない。
0235デフォルトの名無しさん2006/10/25(水) 23:45:48
char str[] = "Hello!"
→ char str[7] = "Hello!"
→ char str[7] = {'H', 'e', 'l', 'l', 'o', '!', '\0'};

char key[128] = "abc"
→ char key[128] = {'a', 'b', 'c', '\0', '\0', ..., '\0'};
02362322006/10/25(水) 23:48:03
ぐは〜考えれば考えるほど混乱します・・・・
一旦、整理してから出直してきます。
ありがとうございました。
02372322006/10/25(水) 23:54:15
>>233
そのようでした、では char str[] = {"abc","def","ghi"} いう形は
存在しないんですね

>>234
そうですか、わかりました。

>>235
となると、>>234で書かれた事と同じ、[]内の確保数の
問題で意味は同じと考えて宜しいんですね?
0238デフォルトの名無しさん2006/10/26(木) 00:11:24
俺10枚も書けるかなあ
関連研究9枚でいいですか?
0239デフォルトの名無しさん2006/10/26(木) 00:18:16
Windowsプログラムの質問ここでいいですか?

BCB5ラーニング使用してるんですが
Windows XP標準の圧縮(ZIP)ありますよね
プログラム側から制御する方法ってありますか?
0240デフォルトの名無しさん2006/10/26(木) 00:26:08
>>239
シェルフォルダとして扱えるらしい。
http://forums.belution.com/ja/vc/000/368/03s.shtml
#importがBCBでも使えるかどうかは知らないが。
0241デフォルトの名無しさん2006/10/26(木) 00:38:32
>>240
おおおおっ!!
ありがとうございます
がんばってみます
お世話になりました
0242デフォルトの名無しさん2006/10/26(木) 13:22:20
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/2819.txt
教授からもらったプログラムがコンパイルできません。学校ではエラーが出ますが、一応コンパイルは通りました。
家だとコンパイルさえ通りません。環境はBCC developer です。






コレをお願いします
0243デフォルトの名無しさん2006/10/26(木) 14:06:28
>>242
学校の環境と自宅の環境は一緒なの?

うちはBCC developer じゃないんだけど
ちなみに関数内の関数宣言は通らないので
外に出したらコンパイル通ったよ
0244デフォルトの名無しさん2006/10/26(木) 14:21:22
>>243
学校の環境と自宅の環境は違います。学校のはよくわかりません。
関数を外にだしても動作は変わりませんか?
0245デフォルトの名無しさん2006/10/26(木) 14:31:35
>>244
関数 bfs が 関数 breadth_first のデータにアクセスしてるから
それを解決すればおk
俺は bfs の引数に
int *parent, int *blabel, int *queue を追加した

あと出来るならテストデータも示してみて欲しい
正常な動作か判断できないので

コンパイラによっては関数内の関数宣言を許してないからそれが原因かもね
(俺の場合むしろ逆で関数内で関数宣言するコンパイラを知らない)
0246デフォルトの名無しさん2006/10/26(木) 14:40:09
>>245
ファイルアップしていただけませんか?
0247デフォルトの名無しさん2006/10/26(木) 14:53:16
>>246
アップローだ初めて使ったよぉ

http://sa-wiki.com/upload/src/up0052.txt

こんな感じになった
あくまで処理内容まで理解していないから
そちらの環境で正常動作するかは不明だよ
0248デフォルトの名無しさん2006/10/26(木) 15:08:08
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/2822.txt
入力データはこんな感じなんですが、
アップして貰ったので実行するとバグってしまいます・・・・
教授がうざい・・・・
0249デフォルトの名無しさん2006/10/26(木) 15:17:51
>>248
今デバッグ中・・・ちょっと待ってて
0250デフォルトの名無しさん2006/10/26(木) 15:50:30
>>248
ゴメンね
デバッグやったらいくつかミスってた

テスト結果はアップしたテキストにあります
結果はあってますか?確認してください

http://sa-wiki.com/upload/src/up0053.txt

変更点
bfs関数の引数に int *k を追加しました
0251デフォルトの名無しさん2006/10/26(木) 15:52:58
>>248
ごめん
main(void) の scanf("%d", &directed); は消してね
俺の環境だとウィンドウすぐに閉じちゃうから入れといただけ
意味は無いから
0252デフォルトの名無しさん2006/10/26(木) 15:53:03
>>250
合ってます!まじでありがとうございます。
元のプログラムはプログラムとしてダメだってことですよね?
■ このスレッドは過去ログ倉庫に格納されています