掲示板システム
ホーム
アクセス解析
カテゴリ
ログアウト
ディレクトリの取得方法 (ID:60343)
名前
ホームページ(ブログ、Twitterなど)のURL (省略可)
本文
まず初期化されていない文字列に対して、 バッファサイズ分の要素を比較しないほうがいいです。 >for (int i=0; i<MAX_PATH; i++) { でなく for ( int i = 0; Buff[ i ] != '\0'; i++ ) としましょう。 > for (i=0; i<Code; i++) { > Buff2[i] = Buff[i]; > } では、最後の \ の手前までコピーしているだけでなので、 文字列の終端を示す '\0' が入っていません。 Buff2[ Code ] = '\0'; と、ちゃんと入れてあげましょう。 もっとも、文字列の複写ならば、string.hにstrncpyというのがありますので、 strncpy( Buff2, Buff, Code - 1 ); Buff2[ Code ] ='\0'; で同様の処理になります。 ところで、パス文字列には全角文字が含まれるので、'\' の検索では致命的なバグがあります。 Shift_JISでは、1バイトが全角文字を表すコードで2バイト目が '\' のコードという文字が存在します。(ソ とか 能 とかがそう) '\' 検索時に全角文字を意識して検索しないといけません。 # MFCのCStringのReverseFindメソッドのソースをみると、うまいこと検索しているのが分かります。 こういうめんどくさいことがあったので、最初に > _tsplitpath関数を使って といったわけです。 下は _tsplitpath と _tmakepath の例です。 void GetCurrentParentDirectory( LPTSTR lpBuffer ) { TCHAR szCurrentDirectory[ _MAX_DIR ]; TCHAR szDrive[ _MAX_DRIVE ], szDirectory[ _MAX_DIR ]; GetCurrentDirectory( _MAX_DIR, szCurrentDirectory ); _tsplitpath( szCurrentDirectory, szDrive, szDirectory, NULL, NULL ); _tmakepath( lpBuffer, szDrive, szDirectory, NULL, NULL ); } int main( void ) { TCHAR szCurrentParentDir[ _MAX_DIR ]; GetCurrentParentDirectory( szCurrentParentDir ); MessageBox( NULL, szCurrentParentDir, _T( "" ), MB_OK ); return 0; } ただ、_tmakepathを使うと、末尾に '\' がつくので注意してください。
←解決時は質問者本人がここをチェックしてください。
更新する
戻る
掲示板システム
Copyright 2021 Takeshi Okamoto All Rights Reserved.