문자열 리터럴의 첫 번째 문자를 char 배열에 할당하면 전체 문자열 리터럴이 할당됩니다.

인환 크

다음 코드가 어떻게 작동하는지 잘 모르겠습니다.

int p = 0;
char* arr = new char[20];
*((int*)&arr[p]) = *((unsigned int*)"ABCD");

내 관찰은 다음과 같습니다.

arr[p]                   returns a char
&arr[p]                  gets the address of the char (char*)
(int*)&arr[p]            casts the char* to int*
*((int*)&arr[p])         dereferences the int* to int

"ABCD"                   is a char*
(unsigned int*)"ABCD"    casts the char* to unsigned int*
*(unsigned int*)"ABCD"   dereferences the unsigned int* to unsigned int

그런 다음 "ABCD"의 첫 번째 문자 'A'(부호없는 정수로 해석)를 arr의 첫 번째 요소 (int로 해석)로 복사합니다. 그러나 검사시 arr 'A'의 첫 번째 요소 일뿐만 아니라 두 번째, 세 번째 및 네 번째 요소는 각각 'B', 'C'및 'D'입니다.

내 질문은 "ABCD"의 첫 번째 문자 'A'만 arr의 첫 번째 요소에 복사 한 경우 다른 문자 'B', 'C'및 'D'도 어떻게 복사됩니까?

감사합니다

MikeMB

귀하의 관찰은 완벽하게 정확하지만 오른쪽의 역 참조와 할당의 의미를 잘못 이해하는 것 같습니다.

하나 char를으로 복사 (및 변환)하지 unsigned int않지만 sizeof(unsigned int)한 주소에서 다른 주소로 바이트 를 효과적으로 복사 합니다.

이것이 c 스타일 캐스트가 그렇게 위험한 이유 중 하나입니다. (1) : char를 unsigned int로 캐스팅하고 할당하지 않고 char에 대한 포인터포인터캐스팅 한 다음 역 참조합니다. 우측 역 참조 때, 컴파일러는 단지 4 바이트 (있다고 가정 지정된 어드레스에서 시작하는)의를 포함 하고에서만 전환을 수행 하는 .unsigned intsizeof(unsigned int)unsigned intunsigned intint

분명히하고 싶었던 것은 다음과 같습니다.

*((int*)&arr[p]) = unsigned int("ABCD"[0]);

그러나 MM이 지적했듯이 왼쪽은 어쨌든 UB입니다.

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

문자열 리터럴을 예상하는 템플릿에 전달할 문자열 리터럴 배열 저장

분류에서Dev

포인터에 문자열 리터럴의 주소 할당

분류에서Dev

c에서 문자열 리터럴의 메모리 할당

분류에서Dev

포인터를 사용하여 문자열의 첫 번째 문자 교체

분류에서Dev

배열에서 첫 번째 문자를 문자열로, 두 번째 문자를 Int로 필터링 할 수 있습니까?

분류에서Dev

하나의 char 배열을 char 배열의 배열로 분할하는 동안 첫 번째 배열은 항상 임의의 문자로 표시됩니다.

분류에서Dev

다른 문자열 뒤의 첫 번째 문자열 교체

분류에서Dev

구조체 배열의 char 문자열에 메모리를 할당하는 방법은 무엇입니까?

분류에서Dev

C ++ 문자열 클래스에 의해 정의 된 문자열 리터럴이 const char [] 유형입니까?

분류에서Dev

매번 문자열 리터럴이 생성됩니까?

분류에서Dev

두 번째 문자열 PHP에서 첫 번째 문자열의 문자를 확인할 때 출력이 일치하지 않습니다.

분류에서Dev

문자열을 리터럴 객체 배열로 변환 할 수 있습니까?

분류에서Dev

문자열 개체의 첫 번째 및 마지막 인덱스에 포인터 할당

분류에서Dev

문자열 리터럴 상수를 char const * 및 wchar const *로 한 번 정의

분류에서Dev

길이가 배열 자체보다 작은 문자열 리터럴을 할당 할 수있는 이유는 무엇입니까?

분류에서Dev

SQL Server : 매개 변수에 문자열 리터럴 할당

분류에서Dev

문자열 배열을 문자열 리터럴 공용체 유형으로 변환 할 수 있습니까?

분류에서Dev

블록에 문자열 리터럴을 쓰면 전체 문자열 데이터가 데이터 섹션에서 복사됩니까?

분류에서Dev

문자열 리터럴에서 문자 배열 리터럴로

분류에서Dev

Typescript는 문자열 배열의 첫 번째 항목이 문자열임을 이해하지 못합니다.

분류에서Dev

첫 번째 바이트 만 문자열 오프셋 경고에 할당됩니다.

분류에서Dev

문자열 리터럴을 사용하여 문자 자체를 얻는 방법

분류에서Dev

React setState는 fileList를 할당 할 수 없으며 대신 첫 번째 fileName의 문자열을 할당합니다.

분류에서Dev

첫 번째 문자 뒤의 문자열 분할

분류에서Dev

문자열의 일부를 다른 문자열로 교체 (첫 번째 문자열 누락)

분류에서Dev

문자열 리터럴을 동적으로 할당

분류에서Dev

객체 배열에서 속성의 첫 번째 문자를 기반으로 객체 배열을 필터링하는 방법은 무엇입니까?

분류에서Dev

전체 열에서 문자열의 첫 번째 단어를 제거하는 방법은 무엇입니까?

분류에서Dev

스칼라 매크로 : 변수에 할당 된 문자열 리터럴이 일치하지 않습니다.

Related 관련 기사

  1. 1

    문자열 리터럴을 예상하는 템플릿에 전달할 문자열 리터럴 배열 저장

  2. 2

    포인터에 문자열 리터럴의 주소 할당

  3. 3

    c에서 문자열 리터럴의 메모리 할당

  4. 4

    포인터를 사용하여 문자열의 첫 번째 문자 교체

  5. 5

    배열에서 첫 번째 문자를 문자열로, 두 번째 문자를 Int로 필터링 할 수 있습니까?

  6. 6

    하나의 char 배열을 char 배열의 배열로 분할하는 동안 첫 번째 배열은 항상 임의의 문자로 표시됩니다.

  7. 7

    다른 문자열 뒤의 첫 번째 문자열 교체

  8. 8

    구조체 배열의 char 문자열에 메모리를 할당하는 방법은 무엇입니까?

  9. 9

    C ++ 문자열 클래스에 의해 정의 된 문자열 리터럴이 const char [] 유형입니까?

  10. 10

    매번 문자열 리터럴이 생성됩니까?

  11. 11

    두 번째 문자열 PHP에서 첫 번째 문자열의 문자를 확인할 때 출력이 일치하지 않습니다.

  12. 12

    문자열을 리터럴 객체 배열로 변환 할 수 있습니까?

  13. 13

    문자열 개체의 첫 번째 및 마지막 인덱스에 포인터 할당

  14. 14

    문자열 리터럴 상수를 char const * 및 wchar const *로 한 번 정의

  15. 15

    길이가 배열 자체보다 작은 문자열 리터럴을 할당 할 수있는 이유는 무엇입니까?

  16. 16

    SQL Server : 매개 변수에 문자열 리터럴 할당

  17. 17

    문자열 배열을 문자열 리터럴 공용체 유형으로 변환 할 수 있습니까?

  18. 18

    블록에 문자열 리터럴을 쓰면 전체 문자열 데이터가 데이터 섹션에서 복사됩니까?

  19. 19

    문자열 리터럴에서 문자 배열 리터럴로

  20. 20

    Typescript는 문자열 배열의 첫 번째 항목이 문자열임을 이해하지 못합니다.

  21. 21

    첫 번째 바이트 만 문자열 오프셋 경고에 할당됩니다.

  22. 22

    문자열 리터럴을 사용하여 문자 자체를 얻는 방법

  23. 23

    React setState는 fileList를 할당 할 수 없으며 대신 첫 번째 fileName의 문자열을 할당합니다.

  24. 24

    첫 번째 문자 뒤의 문자열 분할

  25. 25

    문자열의 일부를 다른 문자열로 교체 (첫 번째 문자열 누락)

  26. 26

    문자열 리터럴을 동적으로 할당

  27. 27

    객체 배열에서 속성의 첫 번째 문자를 기반으로 객체 배열을 필터링하는 방법은 무엇입니까?

  28. 28

    전체 열에서 문자열의 첫 번째 단어를 제거하는 방법은 무엇입니까?

  29. 29

    스칼라 매크로 : 변수에 할당 된 문자열 리터럴이 일치하지 않습니다.

뜨겁다태그

보관