>
>
>
V1074. Boundary between numeric escape …


V1074. Boundary between numeric escape sequence and string is unclear. The escape sequence ends with a letter and the next character is also a letter. Check for typos.

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

Рассмотрим пример:

const char *str = "start\x0end";

Предполагается, что символы внутри строки разделены нуль-терминалом. Однако на самом деле после 'start' идет символ с кодом '0xE', а затем 2 остальных символа – 'nd'.

Чтобы исправить проблему, можно:

  • разделить строковый литерал на несколько частей;
  • завершить числовую escape-последовательность другой escape-последовательностью.

Например, код выше можно переписать таким образом:

const char *str = "start\x0" "end";

Escape-последовательность можно оставить обособленной от других частей строки:

const char *str = "start" "\x0" "end";

Или ограничить другим спецсимволом, например табуляцией:

const char *str = "start\x0\tend";