>백엔드 개발 >C++ >알 수 없는 크기의 파일을 처리하기 위해 C에서 동적 크기의 배열을 어떻게 만들 수 있습니까?

알 수 없는 크기의 파일을 처리하기 위해 C에서 동적 크기의 배열을 어떻게 만들 수 있습니까?

Barbara Streisand
Barbara Streisand원래의
2024-11-14 20:59:021036검색

How Can I Create Dynamically Sized Arrays in C to Handle Files of Unknown Size?

C 언어의 동적 크기 배열

다음 C 코드를 고려하세요.

<br>int siz = 0;<br>int n = 0;<br>FILE* 그림;</p>
<p>picture = fopen("test.jpg", "r");<br>fseek(picture, 0, SEEK_END);<br>siz = ftell(picture );</p>
<p>char Sbuf[siz]; // 오류: 가변 길이 배열<br>fseek(picture, 0, SEEK_SET);<br>while (!feof(picture)) {</p>
<pre class="brush:php;toolbar:false">n = fread(Sbuf, sizeof(char), siz, picture);
// do stuff with the buffer
// memset(Sbuf, 0, sizeof(Sbuf));

}

이 코드의 목표는 파일의 내용을 버퍼로 읽어들이는 것이지만, 버퍼의 크기는 파일이 열리고 크기가 결정됩니다. 그러나 C 언어에서는 가변 길이 배열 선언을 허용하지 않습니다.

가변 길이 배열의 대안

이 문제를 해결하기 위한 몇 가지 대안이 있습니다:

  • std::벡터: C 사용 동적 배열을 생성하기 위한 표준 템플릿 라이브러리(STL).
    <br>std::Vector<char> Sbuf;</li></ul>
    <p>Sbuf.push_back(someChar);<br>

    • 동적 할당: 할당하려면 new 연산자를 사용하세요. 런타임 시 메모리 array.
      <br>char* Sbuf = new char[siz];</li></ul>
      <p>delete [] Sbuf; // 완료 시 메모리 할당 해제<br>

      고려 사항

      동적 할당은 가변 크기 배열을 생성하는 방법을 제공하지만 다음과 같은 기능을 제공합니다. 몇 가지 주의 사항:

      • 메모리 할당을 적절하게 관리하여 메모리를 방지해야 합니다. 누수.
      • 배열의 인덱스는 포인터이므로 산술 연산을 직접 수행할 수 없습니다.
      • 컴파일러마다 가변 길이 배열을 다르게 구현하여 호환성 문제가 발생할 수 있습니다.

      결론

      가변 길이이긴 하지만 C에서는 배열이 지원되지 않으므로 저장할 데이터의 크기에 맞게 조정할 수 있는 동적 배열을 만드는 데 사용할 수 있는 몇 가지 대체 접근 방식이 있습니다. 프로젝트의 특정 요구 사항과 제약 조건에 따라 가장 적합한 옵션을 선택하는 것이 중요합니다.

      위 내용은 알 수 없는 크기의 파일을 처리하기 위해 C에서 동적 크기의 배열을 어떻게 만들 수 있습니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.