C에서는 레거시 코드에서 "길이가 0인 배열" 상황이 발생할 수 있습니다. 여기에는 길이가 0인 배열을 포함하는 구조체가 포함됩니다. pragma에 의해 경고가 표시되지 않는 동안 이러한 배열을 포함하는 새 구조를 생성하면 오류 2233이 발생할 수 있습니다. 이 문제가 발생하는 이유는 무엇이며 이를 해결하려면 어떻게 해야 합니까?
길이가 0인 배열을 사용하는 이유는 역사적 사실입니다. 배열의 동적 할당을 허용하는 C 해킹입니다. 개발자는 길이가 1인 배열이나 포인터를 사용하는 대신 길이가 0인 배열을 사용하여 구조체를 만듭니다. 이를 통해 구조체의 nData 멤버를 사용하여 배열의 크기를 동적으로 계산할 수 있습니다.
이 문제를 해결하려면 C-Hack을 사용할 수 있습니다. mallocSomeData 함수는 지정된 길이의 배열을 동적으로 할당하기 위해 생성될 수 있습니다:
struct someData* mallocSomeData(int size) { struct someData* result = (struct someData*)malloc(sizeof(struct someData) size * sizeof(BYTE)); if (result) { result->nData = size; } return result; }
이 함수를 사용하면 원하는 길이의 배열로 someData 객체를 생성하여 "길이가 0인 배열" 문제를 효과적으로 해결할 수 있습니다.
부인 성명: 제공된 모든 리소스는 부분적으로 인터넷에서 가져온 것입니다. 귀하의 저작권이나 기타 권리 및 이익이 침해된 경우 자세한 이유를 설명하고 저작권 또는 권리 및 이익에 대한 증거를 제공한 후 이메일([email protected])로 보내주십시오. 최대한 빨리 처리해 드리겠습니다.
Copyright© 2022 湘ICP备2022001581号-3