Пожалуйста, объясните, почему я получаю 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
}
Потому что вы пытаетесь увеличить константу.
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 не обновляет исходный символ.
Вы не можете изменить строковый литерал в стиле C. Это то что ++(*p)
делается.