2017-01-22 21 views
-1

Что он говорит о жестяной банке. Есть ли более умный способ заменить белые пробелы в boost::fs::path, который не требует regex?Escape white space in 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 Моя проблема заключается в передаче строки в Pure Data через libpd. PD интерпретирует пространство как разделитель, поэтому моя строка будет разбита на несколько символов. Окружать его двойными кавычками не получится, и я даже не уверен, что побег в пустое пространство, но это стоит того.

+0

[X/Y проблема] (http://xyproblem.info/), когда вы будете задавать вопросы о выбранном пути решения а не о цели. В этом случае вопрос кажется X /.../ Z, так как вы спрашиваете о пути решения, которое, как вы думаете, хотите избежать, но не указывайте цель. – sehe

+0

Любой конкретный вызов API? – sehe

+0

Не уверен, что вы имеете в виду ... – Morpheu5

ответ

0

Самый умный способ - не делать этого.

Например, используйте execve вместо system (так что вы можете передавать аргументы в массиве, не требуется экранирование оболочки). См. How can I escape variables sent to the 'system' command in C++?

Или, если вы, например. разговаривать с сервером базы данных, не конкатенировать свои запросы, а связывать параметры в подготовленный оператор. Опять же это исключает необходимость любого выхода.

избежать маскирование избегает Уйма вопросов безопасности (RCE, SQLI и т.д.)


Если вы должны, вероятно, просто сделать

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

Это было бы прекрасно для, например, bash shells

Для чего-нибудь еще найдите, какие символы нужно экранировать и использовать существующие функции библиотеки, которые соответствуют цели, например.

+0

Это было бы нормально, но я говорю с Pure Data, посылая строку как символы. Pure Data принимает пробелы как разделители, поэтому моя строка разбивается на несколько символов. Я не уверен, что побег будет работать, но это стоит того. – Morpheu5

+0

@ Morpheu5 Я тебя слышу, но исправлю тебя: ты ** не говорил о чистых данных. На самом деле вы никогда не упоминали слово до вашего последнего комментария. Контекст важен! Если вы обновите вопрос LINK до соответствующей документации (что такое Pure Data?), Я посмотрю, могу ли я ответить на ваш практический вопрос. – sehe

+0

Хех, если бы я мог найти решение, посмотрев документацию, я бы не стал задайте вопрос. Я отредактировал этот вопрос, но, как вы увидите, PD - довольно неясный инструмент специалиста, и я не думаю, что предоставление его в качестве контекста могло бы помочь вообще. На самом деле, не так много людей, которые хорошо осведомлены как на PD, так и на текстовых языках программирования, поэтому мои шансы получить ответ будут настолько уменьшены, что на практике я задаю вопрос о выбранном решении это, пожалуй, лучший способ действий. В любом случае, вы можете попробовать :) – Morpheu5