2017-01-22 10 views
-1

スズについては何を言いますか? regexを必要としないboost::fs::pathの白いスペースを置き換えるためのより洗練された方法はありますか?一例としてboost :: fs :: pathの空白をエスケープします。

EDIT

_appBundlePath = boost::fs::path("/path/with spaces/here"); 
regex space(" "); 
string sampleFilename = regex_replace((_appBundlePath/"audio/samples/C.wav").string(), space, "\\ "); 

質問:正規表現を使用して回避する方法はありますか?私には過剰なもののようだ。

EDIT 2私の問題は、libpdを介してPure Dataに文字列を渡すときです。 PDはスペースを区切り文字として解釈するので、私の文字列は複数のシンボルに分割されます。それを二重引用符で囲むことはできません。私は空白を逃すことさえ確実ではありませんが、それは価値があります。

+0

あなたが選択したソリューションパスについての質問をしたときに、[X/Yの問題は](http://xyproblem.info/)であります目標の代わりにこの場合、問題はX /.../Zのように見えます。なぜなら、回避したい解決策のパスについて尋ねるからですが、目標を指定しないからです。 – sehe

+0

特定のAPI呼び出しを念頭に置いていますか? – sehe

+0

あなたが何を意味するか分かりません... – Morpheu5

答えて

0

賢明なやり方ではありません。

たとえば、systemの代わりにexecveを使用します(したがって、シェルでエスケープする必要はありません)。例えば、 How can I escape variables sent to the 'system' command in C++?

クエリを連結せず、パラメータを準備されたステートメントにバインドします。これもまた、エスケープの必要性を排除する。

回避エスケープは、セキュリティ上の問題(RCE、SQLIなど)


あなたがしなければならない場合は、おそらくちょうど行うの全体のスルーを回避

"'" + replace_all(path.string(), "'", "''") + "'" 

これは例えばの罰金になりますbashシェル

その他のものについては、エスケープする必要がある文字を見つけて、目的に合った既存のライブラリ関数を使用してください。

  • http://en.cppreference.com/w/cpp/io/manip/quoted
  • https://dev.mysql.com/doc/refman/5.7/en/mysql-real-escape-string.html

      ...など
  • +0

    それは問題ありませんが、私はPure Dataと対話して文字列をシンボルとして送信しています。純粋なデータはセパレータとしてスペースを取るので、私の文字列は複数のシンボルに分解されます。エスケープスペースもうまくいくかどうかはわかりませんが、それは価値があります。 – Morpheu5

    +0

    @ Morpheu5私はあなたのことを聞いていますが、あなたを訂正します。あなたは**純粋なデータについて話していない**です。実際には、あなたはあなたの最後のコメントまで言葉を一度も言及しませんでした。文脈は重要です!質問をLINKで関連文書(純粋なデータとは何ですか?)に更新すると、私はあなたの実用的な質問に答えることができるかどうかを見ていきます。 – sehe

    +0

    Heh、文書を見て解決策を見つけることができたら、ここで質問してください。私はその質問を編集しましたが、あなたが分かるように、PDは非常にあいまいな専門ツールであり、文脈が全く役に立たないので、PDを提供するとは思いません。実際、PDとテキストベースのプログラミング言語の両方に精通している人があまりいないので、答えを得るチャンスが減り、実際には、選択されたソリューションについての質問をしています間違いなく最高の行動コースです。とにかく、試してみてください:) – Morpheu5

    関連する問題