「Androidは電気羊の夢を見るか」を読みたい管理者のブログ

仕事などでの色々な発見を記事にしてます。不定期更新。

__FILE__が絶対パスになるのをどうにかしたい

久しぶりに技術ネタです
ずっとC#いじってたからC言語
「不便!」
C#だと一発で出来ることが小細工をしないとできなかったりするんですよ。
たとえば文字列の操作。
開発環境によって独自に文字列型定義しちゃったりしてるからそのままだと標準ライブラリ呼べないし
でもそれでもchar*なんかより全然便利だったりして。
フルパスからファイル名だけ抜き出したいときどうするの?
調べたら標準ライブラリですごいかんたんに実装できる。

#define FILE (strrchr(__FILE__, '/') ? strrchr(__FILE__, '/') + 1 : __FILE__)

これだけ

えっ?


このstrchr関数、調べてみると

文字列 s において文字 c が最後に見つかった位置をポインタで返却します。 見つからなかったときにはNULLを返却します。
文字列終了コードの'\0'も文字列の一部と見なします。つまり、strrchr(s, 0); も可能です。
strrchr

だそうです。

せっかくなので実装してみる
ちなみにうちの環境じゃフォルダの区切り文字は\\だった

#include
#include
#define FILE (strrchr(__FILE__, '\\') ? strrchr(__FILE__, '\\') + 1 : __FILE__)

int main() {
char* dirpath;

dirpath = FILE;
printf("%s",dirpath);
return 0;
}

そんな感じ!

via:
http://d.hatena.ne.jp/shouh/20131105/1383653323
d.hatena.ne.jp