Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> การเขียนโปรแกรม C

เหตุใดเราจึงถือว่า strncpy ไม่ปลอดภัยใน C / C ++


ฟังก์ชัน strncpy() ใช้เพื่อคัดลอกจำนวนอักขระที่ระบุไปยังปลายทางจากต้นทาง

ต่อไปนี้เป็นไวยากรณ์ของ strncpy()

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

ในที่นี้ ปลายทางคือตัวชี้ไปยังอาร์เรย์ปลายทางที่จะคัดลอกสตริงต้นทาง ต้นทางคือสตริงที่ต้องการคัดลอก และ n คือจำนวนอักขระสูงสุดที่จะคัดลอกจากสตริงต้นทาง

ฟังก์ชัน strncpy() ไม่ปลอดภัยเพราะถ้าอักขระ NULL ไม่พร้อมใช้งานใน n อักขระตัวแรกในสตริงต้นทาง สตริงปลายทางจะไม่ถูกยกเลิก NULL

โปรแกรมที่แสดง strncpy() ใน C++ มีดังต่อไปนี้

ตัวอย่าง

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