++ 연산자를 사용하여 segfault를 얻는 이유를 설명하십시오. 명시 적으로 1을 더하는 것과 ++ 연산자를 사용하는 것의 차이점은 무엇입니까?++를 사용할 때 seg 오류가 발생하지만 '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
}
'++ (* p)'는 문자열 자체를 수정하려고 시도합니다. 리터럴 문자열이기 때문에 그렇게 할 수 없습니다. 'char *'(원래'const char *'에서)로 캐스팅하는 것은 처음부터 잘못되었습니다. – jogojapan
전적으로 정확하다고 생각하지 않습니다. 그 사람의 대답을 읽은 후에는 실제로 ++ 연산자를 호출하기 전에 (* p)가 'h'문자를 반환하기 때문에 실제로 문자열 리터럴이 아닌 문자 리터럴을 수정하려고한다고 생각합니다. –
코드에는 리터럴이 하나뿐입니다.''hello "'(1은 제외하고는 관계가 없지만) 문자열 리터럴입니다. '* p'는 그 문자 안에있는 문자 중 하나의 주소를 가리 킵니다. 주소가 가리키는 값을 수정하려고 시도합니다. 이 작업을 성공적으로 수행하려면 해당 문자를 수정해야하므로 코드에 정의 된 문자열 리터럴의 일부이므로 문자열 리터럴을 수정하는 데 성공했을 것입니다. – jogojapan