'char*'로의 문자열 리터럴 변환이 C에서는 허용되지만 C에서는 더 이상 사용되지 않는 이유
C에서는 아래와 같이 문자열 리터럴을 'char*' 포인터에 직접 연결합니다.
char* p = "abc";
그러나 C 11 이상에서는 문자열 리터럴이 수정되면 정의되지 않은 동작으로 이어질 가능성이 있기 때문에 이 암시적 변환이 제거되었습니다. C 표준은 § C.1.1에서 위의 예가 이제 유효하지 않다고 명시적으로 명시합니다.
이 문제를 해결하기 위해 C에서는 문자열 리터럴을 'char*' 포인터로 변환하는 명시적 형변환을 허용합니다. 이 캐스트는 프로그래머가 잠재적 위험을 이해하고 발생할 수 있는 모든 결과에 대해 책임을 진다는 것을 분명히 나타냅니다.
char* p = (char*)"abc"; // Valid with explicit cast
C의 명시적 캐스트는 두 가지 목적으로 사용됩니다.
그러나 명시적 캐스트를 사용하더라도 문자열 리터럴을 'char' 포인터에 할당하는 것은 여전히 C에서 모범 사례로 간주되지 않는다는 점에 유의하는 것이 중요합니다. 더 안전한 접근 방식은 'const char' 포인터를 사용하는 것입니다. 이 포인터는 문자열 리터럴을 수정해서는 안 됨을 명시적으로 나타냅니다.
char const *p = "abc"; // Valid and safe
이는 문자열 리터럴이 수정되지 않은 상태로 유지되어 잠재적인 정의되지 않은 오류가 발생하는 것을 방지합니다. 동작.
C에서는 문자열 리터럴에서 'char*' 포인터로의 암시적 변환이 여전히 유효합니다. 이 동작에 의존합니다. C에서 암시적 변환을 제거하면 상당수의 기존 프로그램이 손상되었을 것입니다.
위 내용은 C에서는 직접 문자열 리터럴을 `char*`로 변환하는 것이 허용되지만 C에서는 더 이상 사용되지 않는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!