>ファイル名である文字列からbasenameを取得したい入力中の回答があります。ページを離れますか?※ページを離れると、回答が消えてしまいますページを離れるA回答を続ける入力中のお礼があります。18:50回答数:5件ファイル名である文字列からbasenameを(スマートに)取得したいです。Perlでは何も考えなくてもできたのですが、C(もしくはC++)では次のようなやりかたしか思いつきません。これでできているので問題ないのですが、何だかモヤモヤします。このやり方では拡張子はピリオド含めて4文字であること前提なのもモヤモヤの原因です。'\0';---------------------------------通報するこの質問への回答は締め切られました。19:35拡張子がないとか、base自体に.を含むとか、考えると、例えばVCなら_splitpath関数を使うのが一番スマートかも。C++ならstd::string::find_last_ofで.を探して、std::string::substrやiterator等の組み合わせで部分文字列を抽出するとか。通報するこの回答へのお礼_splitpath関数ですか。知らなかったのでちょっと調べてみます。VC以外はダメなんですかね?ちょっとそこのところが躊躇されますが、自分はVCなので使ってみます。スマートそうな匂いがしています。22:35最後のピリオドを探すのであれば、strrchrを使えば一発でできますが、foo.tar.gzのようなファイル名の場合、本当にそれでよいのか、いまいち不安が残りますね。通報するこの回答へのお礼ありがとうございます。strchrも検討してみます。19:171.ファイルネームが格納された文字列を先頭から順に一文字ずつピリオドかどうかをチェックする。通報するこの回答へのお礼ありがとうございます。この方法が一番オーソドックスで自然かもしれないです。22:53このQ&Aに関連する人気のQ&A「gzファイル」に関するQ&A:gzという拡張子のファイルを解凍する方法?お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!全カテゴリから検索このカテゴリから検索Q質問する(無料)このQ&Aを見た人はこんなQ&Aも見ています大人のためのおしりトラブル座談会【PR】おしりの悩みといえば、痔を思い浮かべる方も多いのではないでしょうか。今回は、おしりトラブルに悩む女性3人が集まり座談会を開催しました。LPCTSTRの型に変換C言語・C++・C#16CStringからchar*への型変換について教えてください。C言語・C++・C#17charからLPTSTRへの変換方法C言語・C++・C#18複数テキストファイルを読み込み、複数テキストファイルの出力C言語・C++・C#19CStringのFindで文字列検索を行いたいのですがC言語・C++・C#20WaitForSingleObjectの使い方についてC言語・C++・C#大人のためのおしりトラブル座談会【PR】おしりの悩みといえば、痔を思い浮かべる方も多いのではないでしょうか。今回は、おしりトラブルに悩む女性3人が集まり座談会を開催しました。LPCTSTRの型に変換C言語・C++・C#16CStringからchar*への型変換について教えてください。最近使ったファイルからファイル名を取得したいです。回答数ランキングです。言語このQ&Aと関連する良く見られている質問Qファイルやディレクトリの存在確認を行う方法ファイルをオープンするのはfopenでOKですが、ファイルやディレクトリの存在確認を行う方法が知りたいです。何か組み合わせて作るものなのでしょうか?perlとか便利な演算子があるのですが、C/C++って器用ではないですね。Windows2000です。使えとか書いてあるけど。他の回答も見るQfgetsで拾われる改行文字を削除したいお世話になりますC言語初心者のものです。今課題でC言語を用いたプログラミングをFedora上でやっています。問題は、fgetsでテキストファイルから、取得した文字列の中から改行文字を削除できないことです。文字変数のアドレスはわかっているのですが、終端文字に置換しようとすると、セグメントエラーになってしまいます。これは如何にして解決すべきでしょうか。Aベストアンサーポインタとかアドレスとか、C言語の用語としてあるものを別の意味に使うとまぎらわしいです。;に対しての&cが思い浮びます。配列なら「添字」、意味的には「x文字目」ですね。}/nが\nの間違いなら、この方法で半分正解です。広い範囲(可能なら全体)で見ないことにはなんとも言えません。等としておく、等といった対策が必要です。ポインタとかアドレスとか、C言語の用語としてあるものを別の意味に使うとまぎらわしいです。;に対しての&cが思い浮びます。配列なら「添字」、意味的には「x文字目」ですね。}/nが\nの間違いなら、この方法で半分正解です。広い範囲(可能なら全体)で見ないことにはなんとも言えません。fgetsが...続きを読む他の回答も見るQ絶対パスからのファイル名の切り離しVC++6.0でCのコードを書いています。絶対パスからのファイル名の切り出し方に関して質問です。FILEPATH="C:\TEST\test.txt"というファイルがあるとして"C:\TEST"と"test.txt"の部分を切り離したいと思っています。フォルダ位置は可変("C:\TEST\TEST"が来ることもある。)このときにFILEPATHの先頭アドレスから最後まで\マークがいくつ来ているか判断して最後の\マーク以降とそれ以前をstrcpyなどでコピーすればできると思うのですが、この際、1.\マークの数を数える2.最後の\マークの手前までパス名をコピー3.最後の\マーク以降をファイル名としてコピーという作業が必要になると思いますがもっと簡単に行う方法があればお教えいただければと思っています。(標準関数を使用して・・・など)よろしくお願いします。関数を使用すれば簡単だと思います。サンプルを示せば、こんな感じです。*/C:\TEST\の後ろの\をカットしたい場合は、下記を追加して下さい。関数を使用すれば簡単だと思います。サンプルを示せば、こんな感じです。ここに処理を書く}という関数が必要なようです。AA)のように定数で分岐させることってできますか?上記のままではできませんが、何か特別な関数とかでできるのでしょうか?Aベストアンサーこんにちは。やりたいことの解釈ですが、(※勘違いの場合はすみません。渡す際に、マクロ名ではなくそのマクロで定義された文字列を渡したい。);のような記述になります。前提として、※2のマクロ内でstrcmp関数を用いて文字列の照合を行っていますので、<string.h>のインクルードが必要になります。※2のマクロの判定文もそれに合わせて増やす必要があります。上記のマクロを使用したサンプルソースを下記に掲載致します。注)エラー処理は行っていません。