Skip to content

Instantly share code, notes, and snippets.

@hyunjun
Created July 10, 2018 14:07
Show Gist options
  • Save hyunjun/2f4e666278435e37567a0656ab2c616a to your computer and use it in GitHub Desktop.
Save hyunjun/2f4e666278435e37567a0656ab2c616a to your computer and use it in GitHub Desktop.
C struct hack
  • Struct hack

    struct data
    {
      int data;
      double somedata;
      char arr[0];  //<-- struct hack
    }
    
    • struct의 마지막 변수를 가변적으로 운영 가능하도록 해줌.

    • 마지막 arr변수를 SIZE만큼 가지고싶을때 struct data *data = (struct data*)malloc(sizeof(struct data) + sizeof(char)*SIZE)로 선언한다면

      struct data
      {
        int data;
        double somedata;
        char arr[SIZE];  //<-- struct hack
      }
      
    • 위와 같이 활용 가능, 마지막 변수에만 적용

    • char arr[0], char* arr둘의 차이점

      • arr[0]같은 경우 구조체의 뒤쪽에 연속해서 자리하기때문에 1번의 memcpy로 복사가 가능
      • *arr의 경우 malloc, memcpy, free를 두번 해야하는 번거로움
    • char arr[1], char arr[0]의 차이

      • C89의 문법에서 undefined상황으로 char arr[1]을 사용하게됨.
      • C99부터는 arr[0]을 "flexible array member"
  • ref

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment