05/04/04 02:05:28
>>361-362
ありがとうございます!だいぶスッキリしました。
リテラルに関しては参照先が不正な値になるんじゃないかとかいう
心配は無用なわけですね。逆の場合(変数、関数のポインタ)は気をつけろと。
すみません。あとここからもう一段階お願いします。
実は言うと今、Unix系ソフトの移植作業をやってまして
こいつらと同等の動作をするものを作りました。
char *dirname(char *path);
char *basename(char *path);
basename()はパス名からディレクトリを除いた部分(ファイル名)を返せばいいので
引数のポインタをそのまま使い回してreturn path+pos;のようにして返してます。
dirname()の方は引数で与えられたパス名からファイル名を除いたものを返すものなので、
関数内でdir[MAX_PATH]のように宣言した配列に、引数の文字列からファイル名部分を
除いたものをstrncpyでコピーなどして、最後にdir(先頭アドレス)を戻り値にしてます。
(ちなみにさっきの質問は"."「カレントディレクトリ」を返す場合でした。)
長すぎるのでまとめると、
・basename()の戻り値は呼び出し先のローカル変数とは無関係である。
・dirname()の戻り値は呼び出し先のローカル変数に依存している。
この場合だと、dirで確保していたアドレスは戻り先で参照しても安全なのでしょうか?
ちゃんと動くし、自分でも大丈夫だと思ってたのに警告が出たので不安になりました。
やたら長くてすみません。何かこれより良い実装方法がもしあればご教授願います。