2011-04-07 5 views
6

나는 처음에는 비어 mainbuf[bufsize]입니다.memcpy를 올바르게 사용하는 방법은 무엇입니까?

일부 입력에서 읽는 중 : read(fd, otherbuf, sizeof(otherbuf))otherbuf에 할당 된 다른 문자열입니다. otherbuf에 새 문자열을 지정할 때마다 mainbuf에 추가하려고합니다.

memcpy(mainbuf,otherbuf, numberofBytesReadInotherbuff)를하지만 나에게 모든 문자열을 제공하지 않습니다

내가 할. 일반적으로 마지막으로 otherbuf이 맞지만 다른 모든 문자는 누락되었습니다.

답변

18

memcpy에 전화 할 때마다 대상 포인터를 변경해야합니다.

예를 들어, mainbuf에 4 바이트가 있다고 가정합니다. 다음으로 10 바이트를받습니다. 추가 방법은 다음과 같습니다.

memcpy(mainbuf + 4, otherbuf, 10); 
+2

다음을 참조하십시오 : ['mempcpy'] (http://linux.die.net/man/3/mempcpy). – mgalgs

3

memcpy는 메모리를 대체하지만 추가하지 않습니다. memcpy를 사용하려면 코드가 좀 더 복잡해야합니다.

void * memcpy (void * destination, const void * source, size_t num);

mainbuf를 전달할 때마다 매번 동일한 대상 주소를 전달하게됩니다. memcpy를 사용할 때마다 대상 주소를 증가시켜 매번 동일한 문자열을 겹쳐 쓰는 대신 후속 메모리에 배치해야합니다.

strcat를 대신 사용해보십시오. 문자열을 함께 연결하기 때문에 원하는 작업을 수행 할 수 있습니다. 메모리를 사용하기 전에 충분한 메모리가 남아 있는지 확인하여 메모리 문제가 발생하지 않도록하십시오.

1

문제의 설명은 strcat의 적절한 사용과 같습니다. Strcat는 버퍼 경계를 넘어서 쉽게 쓸 수 있으므로주의해서 처리해야합니다. 이러한 이유 때문에 올바르게 사용하면 버퍼 오버런을 방지 할 수있는 strncat()과 같은 변형이 있습니다.

관련 문제