오래된 코드를 리팩토링하면 구조체에서 길이가 0인 배열을 사용하는 것과 같은 의심스러운 사례를 발견할 수 있습니다. 이는 요소가 없는 배열을 만드는 이유는 무엇입니까?
다음 구조체를 고려하십시오.
struct someData { int nData; BYTE byData[0]; }
byData에서 볼 수 있듯이 길이가 0인 배열은 특이한 선택입니다. 일반적으로 배열은 요소를 저장합니다. 그러나 길이가 0인 배열은 포인터로 사용될 수 있습니다. 이 경우 byData는 나중에 동적으로 할당될 가변 길이 버퍼에 대한 자리 표시자 역할을 합니다.
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인 배열을 사용하면 동적으로 할당된 버퍼를 참조하여 이를 포인터로 처리할 수 있습니다.
이 코드를 리팩토링하려면 다음 사용을 고려하세요.
위 내용은 C 구조체에서 길이가 0인 배열을 사용하는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!