- 플랫폼 : 리눅스 3.2.0 86 (데비안 위지)
- 컴파일러 : GCC 4.7.2 (데비안 4.7.2-5)
내가 쓰고 있어요 함수는 버퍼의 내용을 다른 버퍼에 복사합니다. 함수가 특정 유형이 아닐 수 있도록 void 포인터를 사용합니다. 테스트 할 수있는 버전이 있는데이 함수가 제대로 작동하고있는 것으로 보입니다. 그러나 내가하고있는 일이 합법적인지 여부는 알 수 없으므로 내 질문은 내가 무엇을했는지에 대한 함정입니다.Deferencing 무효 포인터/무효 포인터 복사
#include <stdio.h>
#include <stdlib.h>
void* voidcpy(void *void_ptr, size_t nbytes)
{
char *char_ptr = void_ptr;
char *cpy_char_ptr = NULL;
size_t i = 0;
if((cpy_char_ptr = malloc(nbytes)) == NULL) return NULL;
for(; i < nbytes; i++) cpy_char_ptr[i] = char_ptr[i];
return cpy_char_ptr;
}
int main()
{
short int *intp = NULL;
short int *cpy_intp = NULL;
size_t siz = 5;
int i = 0;
if((intp = malloc(siz * sizeof(short int))) == NULL)
{
perror("(malloc)");
return -1;
}
intp[0] = 0;
intp[1] = 14;
intp[2] = 187;
intp[3] = 12678;
intp[4] = -234;
if((cpy_intp = voidcpy(intp, siz * sizeof(short int))) == NULL)
return -2;
printf("intp = %p\ncpy_intp = %p\n\n", (void*)intp, (void*)cpy_intp);
for(; i < siz; i++) printf("cpy_intp = %i\n", cpy_intp[i]);
free(intp);
free(cpy_intp);
return 0;
}
'memcpy'를 사용하십시오. –
BLUEPIXY
@BLUEPIXY memcpy()에 대해 알고 있습니다. 솔루션으로 안내해 주셔서 감사하지만 일반적으로 void 포인터와 데이터 형식을 더 잘 이해하기 위해이 작업을 수행하고 있습니다. –
특히 문제가 있다고 생각하지 않습니다. – BLUEPIXY