#include <iostream>
using namespace std;
void main() {
char *str = "Hello";
}
значение типа const char нельзя использовать для инициализации сущности типа char.
В видео уроке который я смотрел, написано абсолютно так же. В чём проблема?
Проблема в том, что, строго говоря, литерал строки - константен, и компилятор может, например, разместить его в памяти только для чтения.
Если бы было можно написать
char *str = "Hello";
то можно было бы его изменить, например, с помощью
str[0] = '!';
что является нарушением. Так что используйте
const char *str = "Hello";
или
char str[] = "Hello";
(в последнем случае литерал строки копируется в изменяемый массив str).
Наличие реальной проблемы в данном случае зависит от компилятора. Если используете gcc, то даже можно ее испытать.
$ cat 1.cpp
int main() {
char *str = "Hello";
str[0] = '!'; // собственно, пытаемся поменять содержимое
return 0;
}
$ g++ --version
g++ (Ubuntu 5.4.0-6ubuntu1~16.04.10) 5.4.0 20160609
Copyright (C) 2015 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
$ g++ -o 1 1.cpp
1.cpp: In function ‘int main()’:
1.cpp:2:17: warning: deprecated conversion from string constant to ‘char*’ [-Wwrite-strings]
char *str = "Hello";
^
$ ./1 # запускаем и получаем ошибку сегментации
Segmentation fault (core dumped)
В статье на вики про ошибку сегментации как раз нечто похожее и обсуждается. Такая ошибка возникает, когда программа пытается что-то сделать с памятью, что ей нельзя. В данном случае - программа пытается изменить содержимое памяти, доступной ей только для чтения.
Тем не менее, не во всех случаях это приводит к проблемам, но предпочтительно не пытаться менять то, что имеет квалификатор const.
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости