[마감] ox 문제입니다.
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탄으로 마감해야겠네요. 다음번엔 좀더 일반적인 아이템을 준비해 보겠습니다.
이상입니다. 빵 맛있게 드세요
😁
Comments
Astroñax
감사합니다.
[removed]
?!?!?
뭐가 뭔지 모르겠지만
태극기를 달고 전장에서 뛰는 사람 중 가장 강력한 doodogi님의 신문이기에
앞뒤 따질거 없이 일단 추천 누르고 봅니다. ㅋㅋㅋㅋ
신문 자주 써주세요. 맨날 전투만 하시고!!! ㅋㅋㅋㅋ
대충 찍어서 메세지로 보내봅니다 ㅋ
HTML인가... 전혀 못풀겠네여
[removed]
이거 뭔가 프로그래밍에 관련있는거같은뎅.... 모르겟다 ㅋㅋㅋㅋ
sprintf(wanter, "%s", doodogi);
울프 조금 수정하고 가정하면,
자리수 부족이 아닐런지요...
원하는 답이 맞는지는 모르나, 빵은 탐나요 ㅋㅋ
내일 오전중에 마감할께요.. 참여자 수가 적으면 오답자도 빵 드립니다. ㅎ
정답자의 반을 드립니다
1번은 x
2번은 sprintf(wanter, "%s", doodogi); 틀림 ㅋㅋ
으엉... 프로그래밍이라닝.. 3번을 찍겠어요! 반터라는 단어가 거슬립니다?!@ ㅋㅋ
sprintf(wanter, "%s", doodogi); 이거요!
왜냐면요 그 위에 1.2 번은 무조건 맞아요 ㅋㅋㅋ 카피되고 문자로 변환되고
wanter = "울프";
이렇게 대입 안될꺼 같은데요.
네 대입안되네요. strcpy()라고 이해해주세요.
중요한건 아래 3문장중에서 틀린것 하나를 맞춰주시면 되요.
sprintf(wanter, "%s", doodogi);
이거 잘못 되었씀 정확하게는 잘못 된게 아니라 위험함.
wanter에 doodogi이거 문장 끝날때까지 복사인데.
strncpy(doodogi, "1234567890",10);
여기서 10칸 전부 썼는데.
11칸 째가 null 이 아닐수 있씀.
그래서 쓰레기 데이터를 복사해넣을수도 있어서 위험하고
wanter의 10칸을 오버 할수 있어서 위험함.
어제 술먹고 갑자기 적은거라 세세한부분에 신경을 못 썻네요.
3문장은 연결된것이 아니고 그중에 하나 고르는 걸로 하죠. ㅎㅎ
이응 이응 이응 이응
1. 잘못 됬씀. ERROR
2. 위험함.warring
3. 위험함.warring
이해 안가니 패스 ㅋㅋㅋㅋ
뭔지 모르겠네요.
c언어인가요... 아닌가... ㅋㅋㅋㅋㅋㅋㅋㅋㅋ
전공이 이쪽이 아니라 잘 모르겠지만 3번 찍고 갑니다~
1번 찍어요.
잘먹겠습니다~~~
음.. 뒤늦게 보니까 제 닉네임이 지나간건 기분탓..[은 아니겠ㅈ..
]