文字列操作


白馬  2005-09-08 18:41:10  No: 58912  IP: 192.*.*.*

よろしくお願いします。

配列buf[256]にファイルパスが格納されています。
C:\aaa\bbb\ccc.exe
ここから配列buf2[256]
へ最後の\以下をコピーしたいのですが、
つまり、buf2[256]にはccc.exeを入れたいのですが、
どうしたらよいのでしょうか?

編集 削除
Blue  2005-09-08 18:49:36  No: 58913  IP: 192.*.*.*

_splitpath関数と_makepath関数を調べてください。

可能であれば、APIのPathFindFileName等も調べてください。

編集 削除
ミン  2005-09-09 14:50:38  No: 58914  IP: 192.*.*.*

力技でいいのなら

int length = strlen( buf );

for( int i = length ; i >= 0 ; i-- )
{
  if( buf[i] == '\\' ) break;
}

strcpy( buf2 , &buf[i + 1] );

こんな感じでできるかと。
ちゃんとした関数使ったほうがいいかもですが;;

編集 削除
Blue  2005-09-09 14:55:18  No: 58915  IP: 192.*.*.*

> ちゃんとした関数使ったほうがいいかもですが;;
マルチバイトを意識していないので、この方法は無理です。
(2バイト目が\の全角文字がダメ)
# _mbsrchrで\の位置を探すならばOK

_splitpath関数ならば、そこら辺意識して区切ってくれます。

編集 削除
ミン  2005-09-09 15:06:46  No: 58916  IP: 192.*.*.*

> マルチバイトを意識していないので、この方法は無理です。
おっしゃるとおりです。完全に失念していました。

以前自分の作ったプログラムで上のような力技でパスを切っていたりしたんですが…かなり危険だったんですね。

ご指摘ありがとうございました。

編集 削除