Рассмотрим следующий пример:
char* p = "asdf"; p[2] = 'x';
В языке С так писать можно, а в языке С++ — нет. В языке C++ строковый литерал является константой, т. е. неизменяемой величиной, поэтому оператор p[2] = 'x' (который пытается превратить исходную строку в строку "asxf") является недопустимым. К сожалению, некоторые компиляторы пропускают присваивание указателю p, что приводит к проблемам.
Также вам может показаться, что такая тема как
никак не связана и даже не тематична с программированием. Хотя, может быть и связана.
В любом случае все-таки зайдите на сайт lifemedical.ru
Тема узи щитовидной железы там представлена весьма широко.
Если вам повезет, то произойдет ошибка на этапе выполнения программы, но рассчитывать на это не стоит. Вместо этого следует писать так:
const char* p = "asdf"; // теперь вы не сможете записать символ
// в строку "asdf" с помощью указателя p
Эта рекомендация относится как к языку C, так и к языку C++.
Функция strchr() из языка C порождает аналогичную, но более трудноуловимую проблему. Рассмотрим пример.
char* strchr(const char* s, int c); /* найти c в константной строке s
(не C++) */
const char aa[] = "asdf"; /* aa — массив констант */
char* q = strchr(aa, 'd'); /* находит символ 'd' */
*q = 'x'; /* изменяет символ 'd' в строке aa на 'x' */
lyl Опять-таки, этот код является недопустимым ни в языке С, ни в языке С++,
но компиляторы языка C не могут найти ошибку. Иногда это явление называют трансмутацией (transmutation): функция превращает константы в не константы, нарушая разумные предположения о коде.
В языке C++ эта проблема решается с помощью немного измененного объявления стандартной библиотечной функции strchr().
char const* strchr(const char* s, int c); // найти символ c
// в константной строке s char* strchr(char* s, int c); // найти символ c в строке s
Аналогично объявляется функция strstr().
Опубликовал katy
May 01 2015 11:04:03 ·
0 Комментариев ·
3175 Прочтений ·
• Не нашли ответ на свой вопрос? Тогда задайте вопрос в комментариях или на форуме! •
Комментарии
Нет комментариев.
Добавить комментарий
Рейтинги
Рейтинг доступен только для пользователей.
Пожалуйста, залогиньтесь или зарегистрируйтесь для голосования.
Нет данных для оценки.
Гость
Вы не зарегистрированны? Нажмите здесь для регистрации.