ページ 1 / 1
文字列の格納
Posted: 2012年7月28日(土) 15:51
by Jimmy
C言語に手を出したばかりの初心者です。
あるサイトで下のような方法で文字列を記憶させていました。
char *fname = "test.txt";
この方法でなぜ記憶できるのか教えてください。
(ポインタの概念が少し苦手で十分に分かってないところもあります。)
ちなみに、自分は配列変数を使って記憶させてきました。
Re: 文字列の格納
Posted: 2012年7月28日(土) 16:07
by 赤鬼
Jimmy さんが書きました:C言語に手を出したばかりの初心者です。
あるサイトで下のような方法で文字列を記憶させていました。
char *fname = "test.txt";
この方法でなぜ記憶できるのか教えてください。
(ポインタの概念が少し苦手で十分に分かってないところもあります。)
ちなみに、自分は配列変数を使って記憶させてきました。
最初は誰でもえ?って思いますよね。
まず最初に
"test.txt"という文字の配列がメモリのどこかに確保されます。
(関数かグローバルかによって少し違ってきますが深く説明すると長くなります、説明してほしければしますが)
そして、*fnameにその先頭のポインタが入ります。
状態的に言うと
|'t'|,|'e' |,|'s'|,|'t'|,|'.'|,|'t'|,|'x'|,|'t'|
がメモリの何処かに連続して格納されます。
このときに普通の文字列みたいにstr[]="test.txt"のstr[]のような文字列型の配列が無い状態だと思ってください。
なので、このままでは格納してもアクセスするものがありません(str[]のような配列が無いので)
そこで先頭のchar型をあらわすchar型のポインタが必要になるわけです。
*fnameはそれにアクセスする為のポインタと思ってください。
Re: 文字列の格納
Posted: 2012年7月28日(土) 16:19
by Jimmy
丁寧な説明ありがとうございます。
やはりポインタについてもっと勉強したほうが良さそうです。赤鬼さんの説明でおおよその意味が分かりました。ありがとうございます!
Re: 文字列の格納
Posted: 2012年7月28日(土) 17:06
by 赤鬼
Jimmy さんが書きました:丁寧な説明ありがとうございます。
やはりポインタについてもっと勉強したほうが良さそうです。赤鬼さんの説明でおおよその意味が分かりました。ありがとうございます!
ポインタの勉強だけではなくて、変数についてや、メモリスタックなどの勉強になると思います。
コード:
void main(){
"test.txt";
}
とだけ書いてもコンパイラに怒られない理由です。
がんばってください。
それと、解決したのでしたら、解決のチェックボックスにチェック入れてくださいね。
Re: 文字列の格納
Posted: 2012年7月28日(土) 18:52
by Jimmy
いろいろとありがとうございました!これからもお世話になるかもしれません。その時もご指導お願いします!!