- 1 名前:デフォルトの名無しさん mailto:sage [03/11/09 15:37]
- いろんなスレが乱立していますが、統合的なスレッドがないので立てました。
質問もOK 関連スレ C#って死滅する理由がないよね! Part4 pc2.2ch.net/test/read.cgi/tech/1042464104/ C#最強伝説 pc2.2ch.net/test/read.cgi/tech/1061208152/ C#とJava、どっちをおぼえればいいの? pc2.2ch.net/test/read.cgi/tech/1006715468/ C#Builder Professional 質問箱 pc2.2ch.net/test/read.cgi/tech/1062433418/ 関連リンク dir.yahoo.co.jp/Computers_and_Internet/Software/Programming_Tools/Programming_Languages/C_Sharp/
- 363 名前:360 mailto:sage [2005/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で確保していたアドレスは戻り先で参照しても安全なのでしょうか? ちゃんと動くし、自分でも大丈夫だと思ってたのに警告が出たので不安になりました。 やたら長くてすみません。何かこれより良い実装方法がもしあればご教授願います。
- 364 名前:360 mailto:sage [2005/04/04(月) 02:14:47 ]
- 何度もすみません。つまりさっき私が言ったdirname()の実装は
char *func2(){ char *s = "a"; /* ポインタ s を "a" を指すポインタで初期化 */ return s; /* ポインタ s の値、つまり "a" を指すポインタを返している */ } この場合と同じと考えていいんでしょうか?ってことですね。 私の目には全く同じものに映るのですが、間違いありませんでしょうか。
|

|