[마감] ox 문제입니다.

Day 2,392, 10:30 Published in South Korea South Korea by doodogi

char doodogi[10]={0};
char wanter[10];

wanter = "울프";

// 다음중 잘못된 문장은?
1. strcpy(doodogi, "1234567890");
2. strncpy(doodogi, "1234567890",10);
3. sprintf(wanter, "%s", doodogi);

내용이 부족하네요.

위문제는 사소한듯 보이지만 아무도 안 가르쳐주는 팁입니다.. ㅎㅎ
맞히시는분 상금 q5빵 500개 드립니다.

단 첫번째 맞춘분이 나눠드려야 합니다.(첫번째분은 2000개)



마감하겠습니다.
답은 1번입니다.


1번의 경우 배열dodogi의 크기는 10byte인데 11byte를 복사하려고 하기 때문에 segment fault오류로 프로그램이 죽습니다.(문자열은 뒤에 널문자 1byte가 추가된다는 것 다 아시죠? ㅎㅎ)


근데 2번의 strncpy는 다른 문자열함수들과(sprintf, strcpy, strcat....) 달리 마지막에 널문자를 넣지 않습니다. 그래서 2번문장은 정상적으로 작동합니다.

따라서 strncpy를 사용할 경우, 사용전에

memset(doodogi, 0, sizeof(doodogi);

와 같은 코드를 넣거나

doodogi[10] = '\0'

와 같은 코드를 사용후에 추가해야만 해당배열은 문자열배열이 됩니다.

실제 프로그램상에도 strncpy를 통과한 배열을 문자열로 착각해서 생기는 버그가 많습니다.


간단히 2줄로 요약하자면.

1. 문자열은 실제 문자열보다 1byte 더 크다.
2. strncpy()는 무뉘만 문자열함수일뿐 문자열함수가 아니다.



코딩팁 시리즈를 계획했었는데 프로그램 모르시는분들이 많은 관계로 1탄으로 마감해야겠네요. 다음번엔 좀더 일반적인 아이템을 준비해 보겠습니다.
이상입니다. 빵 맛있게 드세요 😁