C言語での文字列について

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

C言語での文字列について

#1

投稿記事 by march3 » 16年前

はじめて投稿します。C言語歴4年目の者です。
今までずっとC言語は文字列扱うのに苦労すると感じてきましたが、
以下のようなプログラムがちゃんと動作するのは「たまたま」なのか「必然」なのかがよくわかりません。
#include <stdio.h>

int main(void);
char* func(void);

int main(void){
    printf("%s\n",func());
    return(0);
}

char* func(void){
    char* buffer="hello";
    return buffer;
}


"hello"の文字列をbufferというローカル変数に入れているため、bufferの領域自体はfuncを抜けると解放されますよね。
でもbufferの指している先の"hello"の文字列が格納されているメモリ領域自体は解放されないのでしょうか?

要するに""で作られた文字列は、mallocみたいにfreeなどで解放処理をされない限り
関数のスコープを抜けても利用できる領域なのかどうかを知りたいのです。
またもしそうであるならば、""の領域を解放したい時はどのようにすればできるのか。そんな方法はそもそもあるのか。

もしご存知の方がいれば教えてください。

ちなみに上のプログラムはVineLinux上のgccでコンパイルしたものです。
とりあえず正しく表示はされました。

たかぎ

Re:C言語での文字列について

#2

投稿記事 by たかぎ » 16年前

> でもbufferの指している先の"hello"の文字列が格納されているメモリ領域自体は解放されないのでしょうか?

解放されません。

> またもしそうであるならば、""の領域を解放したい時はどのようにすればできるのか。そんな方法はそもそもあるのか。

文字列リテラルは静的記憶域期間を持ちますので、プログラム終了まで解放できません。

march3

Re:C言語での文字列について

#3

投稿記事 by march3 » 16年前

なるほど。やはりそうでしたか。
これで長年の謎が解けたって感じです。
ありがとうございました。

閉鎖

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