32 바이트 문자열의 처음 16 바이트를 dest
으로 복사하려고합니다.C 메모리가 겹 칩니 까?
unsigned char src[32] = "HELLO-HELLO-HELLO-HELLO-HELLO-12";
unsigned char dest[16];
memcpy(dest, src, 16); // COPY
printf("%s\n", src);
printf("%lu\n", strlen(src));
printf("%s\n", dest);
printf("%lu\n", strlen(dest));
출력은 난 단지 dest
에 HELLO-HELLO-HELL
을받을 것으로 예상 않은 다음
HELLO-HELLO-HELLO-HELLO-HELLO-12
32
HELLO-HELLO-HELLHELLO-HELLO-HELLO-HELLO-HELLO-12
48
입니다. dest
의 첫 번째 16 바이트는 실제로 예상 된 결과를 포함합니다.
실제로 dest
개가 실제로 보유 할 수있는 것보다 많습니까? 길이가 16+32=48
인 이유는 무엇입니까? 의 처음 16 바이트 만 dest
으로 복사 할 수 있습니까?
16 자 문자열을 복사하려면 17 자 버퍼가 필요하며 마지막 문자가 '\ 0'인지 확인하십시오. 무슨 일이 벌어 지는지는 가비지를 생성하는 종결되지 않은 문자열에서의 고전적인 인쇄입니다 (이 경우 src 문자열의 나머지 문자입니다). – Petesh
[string tag-wiki] (https://stackoverflow.com/tags/string/info)를보십시오. – Deduplicator
memcpy 대신 strcpy 또는 strncpy를 사용하고 다른 언어의 문자열과 같은 문자열이 아닌 null로 끝나는 char 배열의 C 문자열을 읽습니다. – Matt