これには_s付きの新バージョンはありません。
何故かというと、初めから受け取るバッファのサイズを指定する引数を持っているからですす。
char *_fullpath( char *absPath, const char *relPath, size_t maxLength );absPathは、絶対パス名を受け取るバッファのポインタです。
relPathには、相対パスを指定します。
maxLengthには、absPathの最大長を指定します。
stdlib.hをインクルードする必要があります。
戻り値は絶対パスを受け取るバッファーへのポインタです。失敗したときはNULLが返されます。
では、簡単なプログラムを見てみましょう。
/* fullpath01.c */ #include <stdio.h> #include <stdlib.h> int main() { char fname[64], fullpath[_MAX_PATH], *lpRet; printf("ファイル名---"); gets_s(fname, sizeof(fname) - 1); lpRet = _fullpath(fullpath, fname, _MAX_PATH); if (lpRet) { printf("Full Path: %s\n", fullpath); } else { printf("入力に誤りが有ります\n"); } return 0; }実行結果は次のような感じになります。
もちろん、実行結果は環境により異なります。
相対パスを入力しないで実行するとどうなるでしょうか。この場合、カレントディレクトリの絶対パスが返されます。
この関数も、実用的なプログラムでは重宝しますね。
Update Sep/07/2007 By Y.Kumei