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";