strncpy, snprintf, strncmp 같은 버퍼 크기 지정 함수 사용시 자주 보이는 실수
프로그래밍/c,c++ 2020. 12. 6. 13:33strncpy, snprintf : 버퍼 크기를 source 문자열 크기로 지정함 => destnation 버퍼 크기로 지정해야함
개발시 동일 함수내 src 와 dst 크기가 같은 경우가 많아 문제가 발생하는 경우가 적지만
함수 인자로 src를 받을때 심각한 문제 발생함
char* src = "012345678";
char dst[5] = { 0, };
strncpy(dst, src, strlen(src)); // 버퍼 오버플로우 발생
snprintf(dst, strlen(src), "%s", src); // 버퍼 오버플로우 발생
strncmp : 문자열 비교를 위 함수 처럼 버퍼 크기를 벗어나지 않는 용도로 사용하여 의도치 않는 결과 발생함
갯수를 지정할 때는 문자열 앞 n 글자만 비교가 필요할 경우만 사용, 문자열 전체 비교는 strcmp
char* str1 = "";
char* str2 = "abcd";
strncmp(str1, str2, strlen(str1)); // return 0 : 같음, n 값이 0으로 문자 비교 없음
strncmp(str1, str2, strlen(str2)); // return 0 이 아닌값 : 다름
char* str3 = "ab";
char* str4 = "abcd";
strncmp(str3, str4, strlen(str3)); // return 0 : 같음, 앞 2글자 비교
strncmp(str3, str4, strlen(str4)); // return 0 이 아닌값 : 다름