この関数のセキュリティ強化バージョンが_splitpath_s関数です。
VS2005以降でないと使えません。
stdlib.hが必要です。
errno_t _splitpath_s( const char * path, char * drive, size_t driveSizeInCharacters, char * dir, size_t dirSizeInCharacters, char * fname, size_t nameSizeInCharacters, char * ext, size_t extSizeInBytes );pathは、分解したい完全パスです。
driveは、ドライブ文字を格納するバッファです。
driveSizeInCharactersは、driveのサイズです。
dirは、ディレクトリパスを格納するバッファです。
dirSizeInCharactersは、dirのサイズです。
fnameは、ファイル名(拡張子なし)を格納するバッファです。
nameSizeInCharactersは、fnameのサイズです。
extは、拡張子(先頭にピリオドがつく)を格納するバッファです。
extSizeInBytesは、extのサイズです。
引数がたくさんあって面倒そうですが、使ってみると簡単です。 では、サンプルを見てみましょう。
ここでは、
C:\abc\def\mybook.txtを、分解することにします。注意すべき点はCでは「\」そのものは 「\\」で表す必要があることです。
/* splitpath01.c */ #include <stdio.h> #include <stdlib.h> int main() { char *mypath = "C:\\abc\\def\\mybook.txt"; char szDrive[8], szPath[64], szFName[32], szExt[8]; _splitpath_s(mypath, szDrive, sizeof(szDrive), szPath, sizeof(szPath), szFName, sizeof(szFName), szExt, sizeof(szExt)); printf("ドライブは%s\nパスは%s\nファイル名は%s\n拡張子は%s\n", szDrive, szPath, szFName, szExt); return 0; }実行結果は次のようになります。
Update Sep/05/2007 By Y.Kumei