strncpy 길이 인자로 strlen을 넣어줄 때
2019. 8. 13. 09:47ㆍPL/C++
strlen은 널문자를 제외한 문자열의 길이를 반환하므로, 반드시 문자열의 끝을 알려주는 널문자 공간을 포함해서 길이를 잡아줘야 한다
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
int main(int argc, char **argv)
{
char buf[20];
strncpy(buf, "Hello world\n", strlen("Hello world\n") + 1);
printf("%s", buf);
return 0;
}
보통은 배열의 크기인 sizeof로 버퍼의 크기를 명시하는데 버퍼가 충분할 때는 인자로 sizeof 연산을 그대로 넣어도 무관하지만 sizeof에 딱 맞는 문자열을 넣는다면 반드시 sizeof()-1을 버퍼의 크기로 잡아준 후 buf[sizeof()-1] = '\0'을 넣어주게 된다
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
int main(int argc, char **argv)
{
char buf[20];
strncpy(buf, "aaaaabbbbbcccccddddd", sizeof(buf) - 1);
buf[sizeof(buf)-1] = '\0';
printf("%s", buf);
return 0;
}
출력은 aaaaabbbbbcccccdddd
'PL > C++' 카테고리의 다른 글
[boost.Asio tutorial] Using a timer synchronously (0) | 2019.08.13 |
---|---|
C++ template (0) | 2019.08.13 |
정적 바인딩과 동적 바인딩 (0) | 2019.08.12 |
C++ Boost.Asio 설치 (0) | 2019.08.12 |
static 정적 멤버와 상수 멤버 (0) | 2019.08.12 |