Computer >> Máy Tính >  >> Lập trình >> lập trình C

Tại sao chúng ta cho rằng strncpy không an toàn trong C / C ++?


Hàm strncpy () được sử dụng để sao chép số ký tự được chỉ định đến đích từ nguồn.

Sau đây là cú pháp của strncpy ()

char *strncpy( char *destination, char *source, size_t n);

Ở đây, đích là con trỏ tới mảng đích nơi chuỗi nguồn sẽ được sao chép, nguồn là chuỗi sẽ được sao chép và n là số ký tự tối đa được sao chép từ chuỗi nguồn.

Hàm strncpy () không an toàn vì nếu ký tự NULL không có sẵn trong n ký tự đầu tiên trong chuỗi nguồn thì chuỗi đích sẽ không bị kết thúc NULL.

Một chương trình chứng minh hàm strncpy () trong C ++ được đưa ra như sau.

Ví dụ

#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;
}

Đầu ra

Kết quả của chương trình trên như sau.

The destination string is: This

Bây giờ chúng ta hãy hiểu chương trình trên.

Chuỗi nguồn chứa dữ liệu "Đây là một chuỗi". Sau đó, strncpy () được sử dụng để sao chép bốn ký tự đầu tiên vào chuỗi đích. Sau đó, nội dung của chuỗi đích được in. Đoạn mã hiển thị điều này như sau.

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