Computer >> 컴퓨터 >  >> 프로그램 작성 >> C 프로그래밍

C/C++에서 strncpy가 안전하지 않다고 가정하는 이유는 무엇입니까?


strncpy() 함수는 지정된 수의 문자를 소스에서 대상으로 복사하는 데 사용됩니다.

다음은 strncpy()

의 구문입니다.
char *strncpy( char *destination, char *source, size_t n);

여기서 destination은 원본 문자열을 복사할 대상 배열에 대한 포인터이고, source는 복사할 문자열이며 n은 원본 문자열에서 복사할 최대 문자 수입니다.

strncpy() 함수는 소스 문자열의 처음 n개 문자에서 NULL 문자를 사용할 수 없으면 대상 문자열이 NULL로 종료되지 않기 때문에 안전하지 않습니다.

C++에서 strncpy()를 시연하는 프로그램은 다음과 같다.

예시

#include <iostream>
#include <cstring>
using namespace std;
int main () {
   char source[20] = "This is a string";
   char dest[20];
   strncpy(dest, source, 4);
   cout << "The destination string is: " << dest;
   return 0;
}

출력

위 프로그램의 출력은 다음과 같습니다.

The destination string is: This

이제 위의 프로그램을 이해합시다.

소스 문자열에는 "이것은 문자열입니다"라는 데이터가 포함되어 있습니다. 그런 다음 strncpy()를 사용하여 처음 네 문자를 대상 문자열에 복사합니다. 그런 다음 대상 문자열의 내용이 인쇄됩니다. 이를 보여주는 코드 스니펫은 다음과 같습니다.

char source[20] = "This is a string";
char dest[20];
strncpy(dest, source, 4);
cout << "The destination string is: " << dest;