strncpy 가 NULL 문자를 끝에 기록을 안해주는 버젼이 있어...
아마 windows 지요...
memset 을 한후 strncpy 를 쓰는데......
다른 방법이 있나 해서요 ^^
지금 상황에서... memset 부하도 줄여야 하므로 ㅋㅋㅋ
윈도우 만이 아니라 원래가 그런거 같은데요 :)
man strncpy wrote:
The strncpy() function is similar, except that not more than n bytes of
src are copied. Thus, if there is no null byte among the first n bytes
of src, the result will not be null-terminated.
이렇게 명시되어 있으니까요...
strncpy( dst, src, n );
dst[n] = '\0';
정도면 되지 않을까 싶은데요 :)
길이가 n보다 짧다면 null 까지 복사될테고... 아니라면 null terminated 라는 보장이 없으니까 후자일 경우에 한해서 문제를 일으키지 않도록 해주면 되겠죠
뭐.. 특별히 위험한 점은 없으나, 세번째 인자보다 작은 문자열이 들어왔을 때, 그 차이만큼 '\0'로 계속 쓰게 되므로, 효율성에서 좋은 함수가 아닙니다. 게다가 n보다 크거나 같은 길이의 SRC가 들어올 경우, '\0'로 끝내주지 않으므로 일일히 검사하기도 번거롭습니다. 따라서 다음과 같이 만들어 두고 쓰는 것이 좋습니다:
Re: strncpy 어떻게들 처리하십니까 ?
윈도우 만이 아니라 원래가 그런거 같은데요 :)
이렇게 명시되어 있으니까요...
정도면 되지 않을까 싶은데요 :)
길이가 n보다 짧다면 null 까지 복사될테고... 아니라면 null terminated 라는 보장이 없으니까 후자일 경우에 한해서 문제를 일으키지 않도록 해주면 되겠죠
오랫동안 꿈을 그리는 사람은 그 꿈을 닮아간다...
http://mytears.org ~(~_~)~
나 한줄기 바람처럼..
[code:1]#include <stdio.h>#inclu
위의 코드를 이용해서 테스트를 했고...
전 젠투 리눅스 에서 gcc 3.3.5 버젼을 이용해서 테스트를 했습니다 glibc 2.3.5 버젼이 깔려있구요...
결과는 아래와 같이 예상한 결과가 그대로 나오는군요 :)
오랫동안 꿈을 그리는 사람은 그 꿈을 닮아간다...
http://mytears.org ~(~_~)~
나 한줄기 바람처럼..
strncpy 를 처음 사용할때... -_-;;NULL 문자가 붙
strncpy 를 처음 사용할때... -_-;;
NULL 문자가 붙지 않은 경험을 한후...
무조건 memset 을 했다는 OTL -_-;;
감사합니다 ^^
가자 해외로 ~ .. 돈 벌러.
strlcpy는 어떻습니까?
strlcpy는 어떻습니까?
strncpy()는 일반적으로 쓰면 안되는 함수입니다. :wink:
strncpy()는 일반적으로 쓰면 안되는 함수입니다. :wink:
뭐.. 특별히 위험한 점은 없으나, 세번째 인자보다 작은 문자열이 들어왔을 때, 그 차이만큼 '\0'로 계속 쓰게 되므로, 효율성에서 좋은 함수가 아닙니다. 게다가 n보다 크거나 같은 길이의 SRC가 들어올 경우, '\0'로 끝내주지 않으므로 일일히 검사하기도 번거롭습니다. 따라서 다음과 같이 만들어 두고 쓰는 것이 좋습니다:
C FAQ: http://www.eskimo.com/~scs/C-faq/top.html
Korean Ver: http://cinsk.github.io/cfaqs/
strlcpy 는... bsd에만 있는 건가요? c99 문서에 strin
strlcpy 는... bsd에만 있는 건가요? c99 문서에 string.h 부분에서는 해당 함수가 없군요... man strlcpy 를 해봐도 없구요 :) glibc 에는 그런 함수가 없는 듯 한데요
오랫동안 꿈을 그리는 사람은 그 꿈을 닮아간다...
http://mytears.org ~(~_~)~
나 한줄기 바람처럼..
strncpy문제.
snprintf 도 쓸만하더군요.
[quote="정태영"]strlcpy 는... bsd에만 있는 건가요?
표준은 아니고.. 아마 OpenBSD에서 젤 처음 만들어진 녀석일 겁니다.
상당히 편하고 안전합니다. :-)
----
Let's shut up and code.
[quote="정태영"]strlcpy 는... bsd에만 있는 건가요?
그렇군요. OpenBSD에서 처음 만들어졌고, 표준이 아니라고 알고 있었는데, 아까 글 쓰기전 확인차 man strlcpy를 했더니,
LIBRARY
Standard C Library (libc, -lc)
라고 되어있길래 "표준으로 채택되었나? @.@" 했습니다. 역시 아니군요.
:shock:
HISTORY
The strlcpy() and strlcat() functions first appeared in OpenBSD 2.4, and
made their appearance in FreeBSD 3.3.
꽤 오래전에 만들어진 녀석이고 개인적으로 프로그램 짤 때 많이 썼었는데, 표준이 아니었군요. 정보 감사합니다. :)
댓글 달기