Как экранировать или завершить escape-последовательность в C - PullRequest
12 голосов
/ 22 ноября 2011

У меня есть последовательности символов, которые я передаю функции декодирования:

Например:

"\x05three"

(Да, это строка в стиле Pascal. Функция переводит строки с префиксом длины в строки с нулевым символом в конце.)

Я написал несколько тестовых случаев, среди которых:

"\x04four"

И, к моему удивлению, это звучало как "Наш". Если присмотреться поближе, выясняется, что спецификация escape-последовательностей для Visual Studio позволяет, что моя последовательность в основном интерпретируется как \x04f, что будет 79 в базе 10 (таким образом, моя получающаяся строка становится "Oour" 79 - «О»)

Мое решение состояло в том, чтобы просто разбить строку:

"\x04" "four"

Вопрос: есть ли другой способ избежать или завершить escape-последовательность?

Ответы [ 2 ]

5 голосов
/ 22 ноября 2011

Да, вы не можете, например, попробовать "\004four". На самом деле, даже "\04four", вероятно, подойдет, потому что f не является восьмеричным числом.

0 голосов
/ 25 января 2019

Вы просто пишете строки рядом друг с другом:

char a[3] = "1\02"   // {'1', '\2', '\0'}  
char a[4] = "1\0""2" // {'1', '\0',  '2', '\0'}

sizeof("1\02") // 3
sizeof("1\0""2") // 4
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...