Для справки, метод, к которому вы обращаетесь, называется flexible array member
, и, к сожалению, он не поддерживается в C ++ как функция ядра или стандартная библиотечная функция. Я нахожу это неутешительным.
std::array
- это одетый массив C-стиля (с некоторыми членами, которые позволяют использовать его в качестве контейнера STL, например, итерации, калибровки, интроспекции типа и т. Д.).
Единственный способ узнать функциональность, которая была бы похожа на гибкий элемент массива, заключалась бы в создании std::vector<char>
с размером, заданным в заголовке sizeof(header) + <extra bytes for payload>
, а не placement new
в vector.data()
]. Вы можете обернуть все это в класс-помощник, чтобы сохранить некоторую типизацию для нескольких сценариев.
Вы должны защитить обратную косую черту с помощью другой обратной косой черты, в противном случае обратная косая черта рассматривается как символ перехода для следующей двойной кавычки. См. Это сообщение в блоге Раймонда Чена для обоснования такого поведения. Вот цитата соответствующей части:
blockquote>
- Строка обратных косых черт, за которой не следует кавычка, не имеет особого значения.
- Четное число обратных слешей, за которыми следует кавычка, рассматривается как пары защищенных обратных слешей, за которыми следует слово-терминатор.
- Нечетное число обратных косых черт, за которыми следует кавычка, рассматривается как пары защищенных обратных косых черт, за которыми следует защищенная кавычка.
Если вас не устраивает синтаксический анализ командной строки, вы можете сделать это самостоятельно:
Просто используйте GetCommandLine и анализируйте командную строку так, как вы этого хотите.
В другом посте уже описывалось, как должна / должна обрабатываться командная строка (см. блог Рэймонда Чена ).
Я попытался скомпилировать это с дополнительной косой чертой ко второму аргументу, как показано ниже, и смог получить желаемый результат!
"\\server\directory\file.ext" "C:\trailing\backslash\\" "file.txt"
Это был вывод
[110 ]Подпишитесь на мой пост, если он вам поможет: D