strncpy 길이 인자로 strlen을 넣어줄 때

2019. 8. 13. 09:47PL/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