오프셋을 사용하여 중첩 된 구조체에 액세스

신병

구조체의 중첩 된 요소에 액세스하기 위해 구조체 오프셋을 사용하고 싶었지만 다음 테스트 프로그램이 문자열을 올바르게 복사하지 않습니다. 이 스 니펫을 어떻게 고칠 수 있습니까 (충돌). 중첩 된 구조체로 건너 뛰지 않는 것 같습니다.

#include <stdio.h>
#include <stdint.h>
#include <stddef.h>
#include <string.h>

typedef struct {
    char a;
    int  b;
    char c[10];
    char d[10];
}foo_t;

typedef struct {
    foo_t foo;
}super_foo_t;

super_foo_t test;

int main() {
    memcpy(&(test.foo) + offsetof(foo_t, c), "hello", sizeof("hello"));
    printf("c should be hello:%s\n", test.foo.c);
    return 0;
}

압 두라 힘

"foo_t"포인터를 오프셋하고 있으므로 "& test.foo"가 "foo_t *"유형이므로 & test.foo [offsetof (foo_t, c)]와 동일합니다.

컴파일러에게 오프셋이 아래와 같이 특별히 바이트 단위임을 알려야합니다.

memcpy((char*)(&(test.foo)) + offsetof(foo_t, c), "hello", sizeof("hello"));

오프셋은 바이트 단위로 오프셋을 제공하므로 바이트 오프셋을 사용하여 계산해야합니다. 따라서 멤버 "b"에 액세스하려면 다음과 같이 작성해야합니다.

int * ptrB = (int*) ((char*)(&(test.foo)) + offsetof(foo_t, b));
*ptrB = 15;

아래에서 수행하는 작업은 먼저 포인터를 바이트로 변환하여 컴파일러가 오프셋을 바이트로 계산 한 다음 원래 포인터 유형으로 돌아갈 수 있다는 것입니다.

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

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

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

Python을 사용하여 중첩 된 JSON 사전에 액세스

분류에서Dev

C #을 사용하여 중첩 된 JSON의 값에 액세스

분류에서Dev

d3.json ()을 사용하여 중첩 된 JSON에 액세스

분류에서Dev

Jquery를 사용하여 중첩 된 HTML 태그에 액세스

분류에서Dev

AngularJS를 사용하여 중첩 된 JSON에 액세스

분류에서Dev

가변 개체 이름을 사용하여 중첩 된 개체의 키에 액세스

분류에서Dev

중첩 된 속성에 대한 where 조건을 사용하여 자식에 액세스

분류에서Dev

Python 3을 사용하여 Django POST 요청에서 중첩 된 객체에 액세스

분류에서Dev

vue 리소스를 사용하여 API의 중첩 된 개체에 액세스

분류에서Dev

중첩 된 구조체에 액세스하기 위해 구조체를 함수에 전달하는 C ++

분류에서Dev

Esper에서 이스케이프 문자를 사용하여 중첩 된 맵에 액세스

분류에서Dev

Coldfusion : 중첩 된 구조 배열에 액세스하는 방법

분류에서Dev

중첩 된 인덱스 목록을 사용하여 목록 요소에 액세스

분류에서Dev

Mongoose-.populate를 사용하여 중첩 된 개체에 액세스

분류에서Dev

변수를 사용하여 중첩 된 JavaScript 개체에 액세스

분류에서Dev

GDB-Python 유형 API를 사용하여 중첩 된 구조체의 절대 오프셋 찾기

분류에서Dev

Javascript의 Nasa Neo API에서 중첩 된 for 루프를 사용하여 데이터에 액세스

분류에서Dev

반응 및 후크를 사용하여 중첩 된 JSON에 액세스 할 수 없습니다. 유형 오류

분류에서Dev

문자열 보간을 사용하여 dartlang에서 중첩 된 맵의 값에 액세스

분류에서Dev

getElementsByTagName을 사용하여 중첩 태그 항목에 액세스

분류에서Dev

셀레늄을 사용하여 중첩 된 HTML 코드의 요소에 액세스

분류에서Dev

쉼표로 구분 된 키를 사용하여 jsonable 중첩 개체에 액세스

분류에서Dev

Laravel 5.1에서 Blade를 사용하여 중첩 된 URL에 액세스

분류에서Dev

Angular 2 FormBuilder를 사용하여 FormArray에서 중첩 된 FormArray에 액세스

분류에서Dev

대시를 사용하여 중첩 된 JSON 속성에 액세스

분류에서Dev

Swift 중첩 된 구조체의 정보에 액세스하는 방법은 무엇입니까?

분류에서Dev

for 루프 동안 중첩 된 객체 VueJS에 액세스

분류에서Dev

열거 가능한 내장 Ruby를 사용하여 중첩 된 데이터에 액세스하고 조작

분류에서Dev

계산 된 연중 첫날을 사용하여 datediff에 액세스

Related 관련 기사

  1. 1

    Python을 사용하여 중첩 된 JSON 사전에 액세스

  2. 2

    C #을 사용하여 중첩 된 JSON의 값에 액세스

  3. 3

    d3.json ()을 사용하여 중첩 된 JSON에 액세스

  4. 4

    Jquery를 사용하여 중첩 된 HTML 태그에 액세스

  5. 5

    AngularJS를 사용하여 중첩 된 JSON에 액세스

  6. 6

    가변 개체 이름을 사용하여 중첩 된 개체의 키에 액세스

  7. 7

    중첩 된 속성에 대한 where 조건을 사용하여 자식에 액세스

  8. 8

    Python 3을 사용하여 Django POST 요청에서 중첩 된 객체에 액세스

  9. 9

    vue 리소스를 사용하여 API의 중첩 된 개체에 액세스

  10. 10

    중첩 된 구조체에 액세스하기 위해 구조체를 함수에 전달하는 C ++

  11. 11

    Esper에서 이스케이프 문자를 사용하여 중첩 된 맵에 액세스

  12. 12

    Coldfusion : 중첩 된 구조 배열에 액세스하는 방법

  13. 13

    중첩 된 인덱스 목록을 사용하여 목록 요소에 액세스

  14. 14

    Mongoose-.populate를 사용하여 중첩 된 개체에 액세스

  15. 15

    변수를 사용하여 중첩 된 JavaScript 개체에 액세스

  16. 16

    GDB-Python 유형 API를 사용하여 중첩 된 구조체의 절대 오프셋 찾기

  17. 17

    Javascript의 Nasa Neo API에서 중첩 된 for 루프를 사용하여 데이터에 액세스

  18. 18

    반응 및 후크를 사용하여 중첩 된 JSON에 액세스 할 수 없습니다. 유형 오류

  19. 19

    문자열 보간을 사용하여 dartlang에서 중첩 된 맵의 값에 액세스

  20. 20

    getElementsByTagName을 사용하여 중첩 태그 항목에 액세스

  21. 21

    셀레늄을 사용하여 중첩 된 HTML 코드의 요소에 액세스

  22. 22

    쉼표로 구분 된 키를 사용하여 jsonable 중첩 개체에 액세스

  23. 23

    Laravel 5.1에서 Blade를 사용하여 중첩 된 URL에 액세스

  24. 24

    Angular 2 FormBuilder를 사용하여 FormArray에서 중첩 된 FormArray에 액세스

  25. 25

    대시를 사용하여 중첩 된 JSON 속성에 액세스

  26. 26

    Swift 중첩 된 구조체의 정보에 액세스하는 방법은 무엇입니까?

  27. 27

    for 루프 동안 중첩 된 객체 VueJS에 액세스

  28. 28

    열거 가능한 내장 Ruby를 사용하여 중첩 된 데이터에 액세스하고 조작

  29. 29

    계산 된 연중 첫날을 사용하여 datediff에 액세스

뜨겁다태그

보관