char**型の関数

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

char**型の関数

#1

投稿記事 by ini » 18年前

char **Word(char* --, int --){
 char **str;
 .
 .
 .
 return str;
}

上のような、返り値がchar**のような関数を作ったのですが、
たとえばmain関数で関数Word(char** --, int --)を呼び出して、
main関数内でstr[0]やstr[1]などを表示させるにはどうしたら良いのでしょうか。

Hermit

Re:char**型の関数

#2

投稿記事 by Hermit » 18年前

char **Word() 内で auto 確保された領域は、
Word() を抜けると開放される為、他の領域では使用できません。

main() 関数内で参照できる範囲に、str 配列を作る必要があります。

ini

Re:char**型の関数

#3

投稿記事 by ini » 18年前

回答ありがとうございます!

main関数でchar**型の、たとえばdataというのは、
関数char **Word()内でdataを表示させることが出来ますよね?
それの反対を考えていたのですが、それも出来ないのでしょうか?

もし出来ないのであれば、どうすれば関数char **Word()内のstrを
main関数内で表示させることが出来るでしょうか?

まだまだ勉強中なので、伝わらないこともあるかも知れないのですがよろしくお願いしますm(__)m

Hermit

Re:char**型の関数

#4

投稿記事 by Hermit » 18年前

>関数char **Word()内でdataを表示させることが出来ますよね?
>それの反対を考えていたのですが、それも出来ないのでしょうか?

auto で確保した領域でなければいいのです。

str は、そのままポインタを返すので問題ありません。返却した値を他の変数に代入すればいいので。
char **ptr = Word(char** --, int --);
とすれば、ptr[?] などでかまいません。

次に、*str (char のポインタ配列)と、**str (char 配列)をどこで確保しているかということです。
malloc で領域確保したり、static エリアを用意したり、外部領域で確保していたりすれば、
そのまま Word の返却値がつかえます。

この二つの部分を、auto で取ると、Word を抜けた時点で開放されるので、
コンパイラはその部分を使う命令を出すかもしれませんし、(他のデータで上書きする)
または、使用禁止区域にしてしまうかもしれません。(バスエラーなど)
または、何事も無かった様に使用できるかもしれません。

ですので、auto で確保した領域は使用できません。
逆に言うと、auto で確保しなければ、使用できます。

閉鎖

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