종료 문자와 관련하여이 둘 사이에 캐스팅을하면 어떻게됩니까? C99 Objective-C에서.uint8_t *와 char * 사이에 캐스팅. 무슨 일이야?
답변
이 대답에서 char은 시스템의 8 비트라고 가정합니다.
unsigned char
을 char
유형으로 사용하는 경우 절대적으로 아무 것도 발생하지 않습니다.
아키텍처에 char
형식으로 signed char
을 사용하는 경우 음수의 char 값이 줄 바꿈되어 예기치 않은 결과가 발생할 수 있습니다. 그러나 종료 null 문자는 절대로 발생하지 않습니다. "캐스팅"아무것도에 의해
유의하시기 바랍니다 정말 그냥 다른 메모리에 특정 위치를 해석하는 컴파일러에게, 발생합니다. 이러한 해석의 차이는 출연진의 실제 (부작용) 효과를 창출 할 것이다.
고맙습니다. 그러나 일부 유형이 특별히 변환되었다고 생각했습니다. 예를 들어 float를 int로 지정합니다. 그것은 회심해야합니다. 그러나 포인터를 위해 어떤 캐스트로도 데이터에 아무 일도 일어나지 않습니까? –
float를 int 값으로 캐스팅하면 copy 값이 변환됩니다. 부동 소수점에 대한 포인터를 캐스팅하면 부동 소수점에 이상한 값이 남을 것입니다. nothign이 변경됩니다. –
물론입니다. 예외가 있는지 몰랐습니다. 나는 uint8_t와 char에 관한 잘못된 것을 말하고있는 어딘가의 웹 사이트를 발견했다. 그래서 나는 여기에 와야 만했다. –
char
및와 호환되는 유형 (가장 최신 데스크탑 컴퓨터에 있어야 함) 인 경우 해당 유형의 객체에 대한 포인터는 동일한 표현 및 정렬 요구 사항을 갖기 때문에 변환에 아무런 문제가 없어야합니다 (암시 적으로 또는 캐스트).
호환되는 경우 다시 지정된 값은 해석되는 유형에 관계없이 동일하게 처리해야합니다.
참고 : uint8_t
및 char
은 서명 된 문자로 구현할 때 100 % 호환되지 않습니다.
유형은 당신이 정의되지 않은 동작을 호출하고 아무것도 일어날 수있는 호환되지 않는 경우 발생할 수있는 가능성이 매우 높다 일이 예상대로 모든 것이 "작품"이다 - 을하지만 보장은 항상 같은를 작동 없다
호환성에 관계없이 UB를 호출하지 않았습니다. ** 모든 타입 **은'unsigned char [sizeof (type)]'의 오버레이 배열로 접근 할 수 있습니다. –
흠 ... 물론! 나는 단지'uint8_t'를'char'와 호환되지 않는 것으로 보았지만'uint8_t'가 상상할 수 없으며'char'와 호환되지 않습니다. – pmg
''char''가 unsigned가 아닌 이상 "compatible"이라고 생각하지 않습니다. 그것은'unsigned char'가 특별하고 무엇이든 접근 할 수 있다는 것입니다.사실, 기술적으로'uint8_t'는 앨리어싱 속성을 제외하고'unsigned char'와 같은 속성을 가진 "확장 된 정수 타입"이 될 수 있다고 가정합니다.이 경우 코드가 UB를 호출 할 수 있습니다 .... –
- 1. Boost MPI를 빌드하려고하지만 lib 파일이 작성되지 않습니다. 무슨 일이야?
- 2. 무슨 일이야? 어느 날 그 OK, 그 다음날 'undefined'?
- 3. Std :: vector가 가비지로 초기화됩니다. 이상한 행동. 무슨 일이야?
- 4. 올바른 설치 실패 php + mysql + phpmyadmin iis? 무슨 일이야?
- 5. 기기를 켜고 바로 애셋로드가 작동하지 않지만 이후에 작동합니다. 무슨 일이야?
- 6. OSX에서 루비 프로세스는 90 % 이상으로 계속 진행됩니다. 무슨 일이야?
- 7. Windows Emacs 셸의 가비지 문자. . . 확실하지 무슨 일이야
- 8. uint8_t 버퍼에 NSString 넣기
- 9. 유형 휘발성 문자를 레지스터 char 유형으로 캐스팅
- 10. 부호없는 int + 문자열을 부호없는 char 벡터에 캐스팅
- 11. Boost FileSystem3 반복자를 const char *로 캐스팅 *
- 12. C# 사용자 정의 예외, 예외 사이에 캐스팅?
- 13. 이 경우 char []와 char *가 어떻게 다른가요?
- 14. C에서 char *가 char **와 동일하게 취급되는 이유는 무엇입니까?
- 15. unsigned char *와 char *와의 캐스팅을 다시 해석하십시오.
- 16. C++에서 const char *와 버퍼를 비교
- 17. Clojure리스트 멤버 캐스팅 오류
- 18. ** copy **와 ** addAll ** 사이에 차이점이 있습니까?
- 19. '['와 ']'사이에 일치하는 PHP의 preg_match 솔루션은 무엇입니까?
- 20. gluLookAt()와 glFrustum() 사이에 차이점이 있습니까?
- 21. 왜 func()와 {} 사이에 선언이 삽입됩니까? SED 소스에서
- 22. 그게 무슨 뜻입니까? reinterpret_cast <char *&> (a) = cp;
- 23. 함수는 실시간으로 호출되면 잘못된 값을 저장합니다. 수동으로 호출하여 올바른 값을 저장합니다. 무슨 일이야?
- 24. .NET Binary 다른 개체에 대한 참조를 사용하여 개체를 serialize합니다. . . 무슨 일이야?
- 25. MySQL 테이블에서는 슬래시를 사용하지만 PDO와 매개 변수가있는 쿼리를 사용합니다. 무슨 일이야?
- 26. 빨간색 5는 모든 데모 응용 프로그램에서 작동하지만 내 자신을 추가하려고하면 중단됩니다. 무슨 일이야?
- 27. SQL 쿼리 계획을 생성하는 데 5 분이 소요되며 쿼리 자체는 밀리 초 단위로 실행됩니다. 무슨 일이야?
- 28. 무슨
- 29. 포인터 캐스팅 경고 두 unsigned char * 값 사이
- 30. 캐스팅 문제 x <char> ~ x <t>
부동 소수점을 정수로 또는 그 반대로 캐스팅하지 않는 한 캐스트가 수행하는 유일한 작업은 컴파일러 경고를 없애는 것입니다. 출력 코드는 정확히 같습니다. – ughoavgfhw
사실이 아닙니다. C 언어 *는 다른 포인터 타입 사이의 암시 적 변환을 정의하지 않습니다 (물론'void *'제외). 캐스트는 변환 할 수있는 유일한 방법입니다. 캐스트없이 변환을 허용하고 경고 만 생성하는 컴파일러는 잘못된 "관대 한"것입니다. 그것은 정확하지 않습니다. –