Почему я получаю ошибку сегмента, когда использую ++, а не когда использую ‘1 +’?

Пожалуйста, объясните, почему я получаю segfault, используя оператор ++. В чем разница между явным добавлением 1 и использованием оператора ++?

using namespace std;
#include <iostream>

int main() {

char* p = (char*) "hello";

cout << ++(*p) << endl; //segfault
cout << 1 + (*p) << endl; // prints 105 because 1 + 'h' = 105

}

3

Решение

Потому что вы пытаетесь увеличить константу.

char* p = (char*) "hello";  // p is a pointer to a constant string.
cout << ++(*p) << endl;     // try to increment (*p), the constant 'h'.
cout << 1 + (*p) << endl;   // prints 105 because 1 + 'h' = 105

Другими словами, ++ Оператор пытается увеличить символ p указывает на, а затем заменить первоначальное значение новым. Это незаконно, потому что p указывает на постоянные символы. С другой стороны, простое добавление 1 не обновляет исходный символ.

8

Другие решения

Вы не можете изменить строковый литерал в стиле C. Это то что ++(*p) делается.

2

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector