#include <stdio.h>
#include <string.h>
struct {
char a[4];
char b[6];
} srct;
void main()
{
char buf[10];
memset(buf, 0x00, 10);
memset(&srct, 0x00, 10);
/* sprintf(buf, \"%-10s\",\"1234\"); */
strncpy(srct.a,\"123\",4);
strncpy(srct.b,\"56789\",6);
printf(\"srct.a[%s]\\n\",srct.a);
printf(\"srct.b[%s]\\n\",srct.b);
memcpy(buf,&srct,sizeof(buf));
printf(\"buf[%s]\\n\",buf);
return;
}
결과..
srct.a[123]
srct.b[56789]
buf[123]
아.. 왜 저렇게 나오는지 한참 고민 했네...
C는 몇달만 안해도 잘 까먹네.. -_-;
아.. 지금은 답을 알고 있음. -_-;
우왕 나도 해봐야지
뭐야 결론으 &srct 는 srct.a를 나타낸다는 거여? 배열로 치면 &a[0]이랑 &a 같은 개념?ㅋㅋ 잼따늅늅
그게 아니라 srct.a[3]이 NULL이라서 123까지만 나온 듯...
멤카피에서 널만나면 함수종료하는득
내가 원하는 결과는 중간이야 어떻게 되든.. buf[123 56789 ] 이게 나와야 함 (3 뒤에 공백 하나, 9 뒤에 공백하나)
어색해도좋아// 그게 아니라 buf에 들어가 있는 게 123\\056789\\0 라서 123만 표현된거다
그러쿠나... 맴카피에서 널만나면 종료하는거구나.. 그럼 거무달 님이 원하는대로 할려면 널을 만나더라도 맴카피가 종료 안하고 계속 카피 해야 하는거네..
memcpy는 맨 마지막 숫자만큼 무조건 복사한다. 따라서 memcpy로 복사할 때 overflow를 일으키지 않으려면 맨 마지막 인자는 반드시 (dest의 길이) 이하로 써야 한다. 문자열이라면 dest 길이 -1 만큼복사하고 맨 마지막에 \\0을 넣어서 메모리 엑세스를 병맛같이 하는 걸 막아야하지.
결론 : 멤카피는 정상, 프린트에프가 병진?
씨..씨샵 만세!!
결론은 둘 다 정상
사용자가 원하는 대로 정상동작했다. 123456789 를 찍고 싶었다면 사용자가 병진
널값 쳐넣어놓고 정상적으로 출력하기 바란 사용자가 병진이군 ㅡ.,ㅡ;