#c #c 17
#c #c 17
Вопрос:
Я пытаюсь вычислить sha256sum файла, в имени которого есть несколько «проблемных» символов:
#include <iostream>
#include <string>
#include <filesystem>
#include <fstream>
int main(){
std::string filename = "photo i too in brasil(1).jpg";
std::string command = "sha256sum " filename;
std::cout << command << std::endl;
std::array<char, 128> buffer;
std::string resu<
FILE* pipe = popen(command.c_str(), "r");
if (!pipe)
{
std::cerr << "Couldn't start command." << std::endl;
return 0;
}
while (fgets(buffer.data(), 128, pipe) != NULL) {
result = buffer.data();
}
auto returnCode = pclose(pipe);
}
Что приводит к:
(base) > $ ./a.out
sha256sum photo i too in brasil(1).jpg
sh: 1: Syntax error: "(" unexpected
Я знаю, что мог бы написать процедуру, которая ищет все проблемные символы и заменяет их соответствующим escape, но мне было интересно, есть ли более разумный способ сделать это? Есть ли уже какая-то подобная процедура в STL? В python я могу сказать shutils, что «бла-бла-бла» — это один аргумент. Могу ли я сделать это и на c ?
Комментарии:
1. Насколько я знаю, нет в STL. Как вы относитесь к boost?
Ответ №1:
В конце я использовал регулярное выражение, чтобы добавить обратную косую черту перед каждым пробелом или скобкой. Это тоже было очень лаконично.