그 일을 버퍼에 데이터를 추가하려면 정의해야합니다
대상 버퍼의 버퍼에 존재하는 데이터의 대상 버퍼의
- 허용 크기
- 양
- 대상 버퍼에 복사 할 데이터의 양
C에서 realloc()은 버퍼의 위치를 변경하거나 변경하지 않을 수있는 오래된 내용의 새 버퍼를 만드는 데 사용할 수 있습니다. C++에는 비슷한 동작을 허용하는 새로운 연산자가 있습니다.
저장된 데이터가 null로 끝나는 문자열이라고 가정하면 2 번째와 3 번째가 알려져 있습니다. - 버퍼의 크기는 append()가 알 수없는 버퍼의 크기입니다. 따라서, 함수
void append(void *y, char *z);
무효 Y 실제로 어떤 구조 나 클래스가 아니면, 를 작업에 부적합하거나 매우 불안전 아마도 불명확 하나 보인다 (그러나 그와 같은 공극 ??? 통과)한다.
귀하는 구현 또는 설명을 제공하지 않았습니다. 외모로 보면 다소 제한적이어야합니다. 적절한 크기의 버퍼를 미리 할당하고 append()가 해당 범위를 벗어나 실행되지 않도록해야합니다. 목표 버퍼를 재 할당 할 수 없으므로, 으로 이미 할당 된 메모리로 제한됩니다. 실제로 형식 매개 변수로 void **y
또는 void &* y
있을 것입니다 목표 버퍼 APPEND를 재 할당하려면 (realloc을() 수도 변경 포인터와 새로운 버퍼 된 버퍼에서 복사 데이터를 않습니다)
이 아키텍처 문제를 제기 - 버퍼의 소유권. 우리가 제어하는 버퍼를 넘겨 주면 제대로 할당하고 그것을 append()에 넘겨 주거나 소유권을 append()에 전달하여 재 할당 할 수 있습니다. 우리가하지 않으면, 우리는 일시적인 버퍼를 만들어야하지만 ... 그 후에 임시 버퍼를 사용할 수 있습니까?
사용자 정의 헤더 쓰기 기능을 사용하지 않는 한 요점은 논쟁 거리입니다. 사용자 데이터 포인터는 CURLOPT_HEADERDATA입니다.이 포인터는 유효한 FILE에 대한 포인터이며 _fwrite() 데이터를 사용해야합니다 ... 또는 CURLOPT_WRITEFUNCTION 및 CURLOPT_READFUNCTION 콜백을 구현하는 경우 해당 포인터는 콜백 디자이너의 재량에 따라 사용할 수 있습니다. 유용한 데이터 컨테이너에 대한 포인터 (libcurl은 fwrite를 기본 콜백으로 사용함).
'void * y'는'std :: string'을 가리 킵니까? 아니면'char' 버퍼? – Galik
알몸 포인터가 있고 그것에 추가하는 것은 경계를 벗어나지 않는 한 확실히 안전하지 않습니다. –
'void'포인터를 처음에 제공 한 유형으로 되돌려 보내고 필요한 모든 작업을 수행하고 수행하십시오. 'buffer * '로 작업하기 위해 일반적인 문자열을 사용하는 트릭을 믿을 수는 없으므로'size * nitems'를 제공해야합니다. – user4581301