>백엔드 개발 >C++ >문자열 리터럴을 `char*`로 변환하는 것이 C에서는 유효하지 않지만 C에서는 유효한 이유는 무엇입니까?

문자열 리터럴을 `char*`로 변환하는 것이 C에서는 유효하지 않지만 C에서는 유효한 이유는 무엇입니까?

Patricia Arquette
Patricia Arquette원래의
2024-12-19 22:32:12896검색

Why is Converting a String Literal to `char*` Invalid in C   but Valid in C?

문자열 리터럴에서 'char*'로의 변환이 C에서는 유효하지 않지만 C에서는 유효한 이유

C의 더 엄격한 유형 시스템은 문자열 리터럴을 참조하기 위해 const char 포인터를 사용하여 정의되지 않은 동작으로 이어질 수 있는 수정을 방지합니다. 이는 문자열 리터럴에서 'char'로의 변환이 암시적으로 허용되는 C에는 없습니다.

이 불일치를 해결하기 위해 C 11에서는 더 이상 사용되지 않는 암시적 변환을 제거하고 다음 코드를 렌더링했습니다.

char* p = "abc";

잘못되었습니다. 그러나 명시적 캐스트는 호환성을 유지합니다.

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

캐스트는 기본 동작을 우회하지 않습니다. 변환이 수행되도록 허용하지만 리터럴 수정으로 인한 정의되지 않은 결과를 방지하지는 않습니다.

C에서는 레거시 코드 호환성을 위해 이 변환의 유효성이 유지됩니다. 광범위한 기존 코드가 이 암시적 변환에 의존하므로 표준 위원회가 사전 경고 없이 이 기능을 중단하는 것은 비현실적입니다.

따라서 C는 유형 안전성을 보장하기 위해 암시적 변환을 금지하지만 C는 보급으로 인해 이를 허용합니다. 코드베이스 종속성. 그러나 잠재적인 문제를 피하기 위해 두 언어 모두에서 문자열 리터럴에 char const*를 사용하는 것이 좋습니다.

위 내용은 문자열 리터럴을 `char*`로 변환하는 것이 C에서는 유효하지 않지만 C에서는 유효한 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.