[C언어] 버퍼 (void *)를 줄이려면?

mandugukbap의 이미지

C언어 만져본지가 어언 10년이 넘어가다 보니 포인터 관련된게 전혀 기억이 안나는군요. 예전엔 이런게 별 문제가 없었던거 같은데 말이죠.

예를 들어 100바이트의 데이터가 담긴 void* buf 란 놈을 뒷 부분의 50바이트로 줄이고 뒷부분의 50바이트만 들어 있게 만들려고 하는데 이거 어떻게 하면 될까요? 즉, 앞의 50바이트를 잘라내어 버리려고 하는 겁니다.

감사합니다.

klara의 이미지

버퍼는 변경되지 않고 시작점만 자주 변경된다면 전체 버퍼를 가리키는 포인터 하나를 항상 유지한 채로 필요한 만큼 더한 포인터를 가져오면 되겠죠.
그게 아니라면 새로할당하고 복사하고 이전 버퍼는 삭제하는수밖에 없습니다.

mandugukbap의 이미지

대충 아래처럼 하면 될 거 같은데, print 해보면 버퍼의 뒷 부분이 잘려 나가는 거 같네요.

void *t = (void *) malloc(new_length);
memset(t, 0, new_length);
memcpy(t, d->data + len, new_length);
free(d->data);
d->data = NULL;
d->data = t;
d->length = new_length;
mandugukbap의 이미지

아, 제대로 되는군요. 다른 부분에 문제가 있었네요. 답변 감사 드립니다.

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.