Computer >> कंप्यूटर ट्यूटोरियल >  >> प्रोग्रामिंग >> सी प्रोग्रामिंग

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

अब आइए उपरोक्त प्रोग्राम को समझते हैं।

सोर्स स्ट्रिंग में डेटा "This is a string" है। फिर strncpy() का उपयोग पहले चार कैरेक्टर्स को डेस्टिनेशन स्ट्रिंग में कॉपी करने के लिए किया जाता है। फिर डेस्टिनेशन स्ट्रिंग की सामग्री प्रिंट की जाती है। वह कोड स्निपेट जो इसे दिखाता है वह इस प्रकार है।

char source[20] = "This is a string";
char dest[20];
strncpy(dest, source, 4);
cout << "The destination string is: " << dest;
  1. C भाषा में strncpy() फंक्शन क्या है? C भाषा में strncpy() फंक्शन क्या है?

    C लाइब्रेरी फंक्शन char *strncpy(char *dest, const char *src, size_t n) स्रोत स्ट्रिंग (src) से गंतव्य स्ट्रिंग (dest) में n कैरेक्टर्स तक कॉपी करता है। यदि src की लंबाई n से कम है, तो dest का शेष भाग नल बाइट्स से भरा जाता है। घोषणा char stringname [size]; आरंभीकरण सिंगल कैरेक्टर: char string[10]

  1. - C/C++ में कैसे जांचें कि स्ट्रिंग इंटीजर है?

    यह जांचने के कई तरीके हैं कि स्ट्रिंग इंटीजर है या नहीं और उनमें से एक तरीका isdigit() का उपयोग करके स्ट्रिंग की जांच करना है। उदाहरण #include <iostream> #include <string.h> using namespace std; int main() { char str[] = 3257fg; for (int i = 0; i < strlen(str); i++) {

  1. - C/C++ में स्ट्रिंग को रिवर्स करना

    उदाहरण #include <stdio.h> #include <string.h> int main() { char s[50], t; int i = 0, j = 0; printf(\nरिवर्स करने के लिए स्ट्रिंग दर्ज करें: ); gets(s); j = strlen(s) - 1; while (i < j) { t = s[i]; s[i] = s[j]; s[j] = t; i++;