文字列の格納

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
Jimmy

文字列の格納

#1

投稿記事 by Jimmy » 13年前

C言語に手を出したばかりの初心者です。

あるサイトで下のような方法で文字列を記憶させていました。
char *fname = "test.txt";

この方法でなぜ記憶できるのか教えてください。
(ポインタの概念が少し苦手で十分に分かってないところもあります。)
ちなみに、自分は配列変数を使って記憶させてきました。

赤鬼

Re: 文字列の格納

#2

投稿記事 by 赤鬼 » 13年前

Jimmy さんが書きました:C言語に手を出したばかりの初心者です。

あるサイトで下のような方法で文字列を記憶させていました。
char *fname = "test.txt";

この方法でなぜ記憶できるのか教えてください。
(ポインタの概念が少し苦手で十分に分かってないところもあります。)
ちなみに、自分は配列変数を使って記憶させてきました。
最初は誰でもえ?って思いますよね。
まず最初に
"test.txt"という文字の配列がメモリのどこかに確保されます。
(関数かグローバルかによって少し違ってきますが深く説明すると長くなります、説明してほしければしますが)
そして、*fnameにその先頭のポインタが入ります。

状態的に言うと
|'t'|,|'e' |,|'s'|,|'t'|,|'.'|,|'t'|,|'x'|,|'t'|
がメモリの何処かに連続して格納されます。
このときに普通の文字列みたいにstr[]="test.txt"のstr[]のような文字列型の配列が無い状態だと思ってください。
なので、このままでは格納してもアクセスするものがありません(str[]のような配列が無いので)
そこで先頭のchar型をあらわすchar型のポインタが必要になるわけです。
*fnameはそれにアクセスする為のポインタと思ってください。

Jimmy

Re: 文字列の格納

#3

投稿記事 by Jimmy » 13年前

丁寧な説明ありがとうございます。

やはりポインタについてもっと勉強したほうが良さそうです。赤鬼さんの説明でおおよその意味が分かりました。ありがとうございます!

赤鬼

Re: 文字列の格納

#4

投稿記事 by 赤鬼 » 13年前

Jimmy さんが書きました:丁寧な説明ありがとうございます。

やはりポインタについてもっと勉強したほうが良さそうです。赤鬼さんの説明でおおよその意味が分かりました。ありがとうございます!
ポインタの勉強だけではなくて、変数についてや、メモリスタックなどの勉強になると思います。

コード:

void main(){
"test.txt";
}
とだけ書いてもコンパイラに怒られない理由です。
がんばってください。

それと、解決したのでしたら、解決のチェックボックスにチェック入れてくださいね。

Jimmy

Re: 文字列の格納

#5

投稿記事 by Jimmy » 13年前

いろいろとありがとうございました!これからもお世話になるかもしれません。その時もご指導お願いします!!

閉鎖

“C言語何でも質問掲示板” へ戻る