Каков наилучший способ найти головные боли с широкими строками, такие как L“%s”?

StackOverflow https://stackoverflow.com/questions/1473183

  •  16-09-2019
  •  | 
  •  

Вопрос

Вот пример одной из головных болей, которые я имею в виду:

У нас есть мультиплатформенный проект, который использует в основном строки в Юникоде для вывода текста на экран.В Windows в VC ++ строка:

swprintf(swWideDest, LEN, L"%s is a wide string", swSomeWideString);

отлично компилируется и печатает широкую строку в другую широкую строку.Однако это действительно должно быть:

swprintf(swWideDest, LEN, L"%ls is a wide string", swSomeWideString);

Без замены '%s' на '%ls' это не будет работать на других платформах.Поскольку тестирование в нашей среде на Windows проще, ускоряется и намного проще в отладке.Такого рода ошибки могут легко остаться незамеченными.

Я знаю, что лучшее решение - это в первую очередь написать правильный код, но под давлением делаются простые ошибки, и в данном конкретном случае ошибка может легко оставаться незамеченной в течение длительного времени.

Я подозреваю, что существует множество вариаций такого рода ошибок, которыми нам еще предстоит насладиться.

Есть ли у кого-нибудь хороший и аккуратный способ поиска подобных ошибок?

:D

Это было полезно?

Решение

Поскольку ни одна из функций *printf семья тоже типобезопасна, ты тоже

  • искать возможные ошибки с помощью регулярных выражений и исправлять их вручную
  • используйте другой типобезопасный подход, возможно, основанный на строковых потоках или boost.format

Другие советы

Возможно, вы захотите взглянуть на Быстрый формат на случай, если Boost.Форматирование выполняется слишком медленно для ваших нужд.

По сравнению со stringstreams и Boost.Форматировать:

  • Потоки IOStreams:Быстрый формат.Форматирование выполняется быстрее, чем IOStreams, в пределах ~ 100-900%, во всех случаях
  • Повышение.Форматирование:Быстрый формат.Форматирование быстрее, чем Boost.Форматирование, в пределах ~ 400-1650%, во всех случаях
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top