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

C++ में memset फ़ंक्शन

इस सेक्शन में हम देखेंगे कि C++ में memset() फ़ंक्शन का उद्देश्य क्या है। यह फ़ंक्शन एक कैरेक्टर के मान को अनसाइन्ड कैरेक्टर में बदलता है और इसे दिए गए str[] द्वारा इंगित ऑब्जेक्ट के पहले n कैरेक्टर्स में से प्रत्येक में कॉपी करता है। यदि n स्ट्रिंग साइज़ से बड़ा है, तो व्यवहार अनडिफाइंड होगा।

memset() फ़ंक्शन का सिंटैक्स

void* memset(void* str, int c, size_t n);

इस उदाहरण में हम एक स्ट्रिंग का उपयोग करेंगे, फिर प्रत्येक कैरेक्टर को लंबाई n तक किसी अन्य कैरेक्टर में बदलेंगे।

उदाहरण 1: स्ट्रिंग पर memset

#include <bits/stdc++.h>
using namespace std;

int main() {
    char str[] = "Hello World";
    memset(str, 'o', 6); // n = 6 लें
    cout << str;
}

आउटपुट

ooooooWorld

उदाहरण 2: ऐरे को 0 और -1 से भरना

memset() का उपयोग सभी मानों को 0 या -1 पर सेट करने के लिए किया जा सकता है। लेकिन हम अन्य मानों का उपयोग नहीं कर सकते, क्योंकि memset() बाइट दर बाइट काम करता है।

#include <bits/stdc++.h>
using namespace std;

int main() {
    int array[10];
    
    // 0 से भरें
    memset(array, 0, sizeof(array));
    for(int i = 0; i < 10; i++) {
        cout << array[i] << " ";
    }
    cout << endl;
    
    // -1 से भरें (सभी बिट्स 1 हो जाते हैं)
    memset(array, -1, sizeof(array));
    for(int i = 0; i < 10; i++) {
        cout << array[i] << " ";
    }
    cout << endl;
    
    // 3 से भरें - गलत परिणाम!
    memset(array, 3, sizeof(array));
    for(int i = 0; i < 10; i++) {
        cout << array[i] << " ";
    }
    cout << endl;
}

आउटपुट

0 0 0 0 0 0 0 0 0 0
-1 -1 -1 -1 -1 -1 -1 -1 -1 -1
50529027 50529027 50529027 50529027 50529027 50529027 50529027 50529027 50529027 50529027

क्यों 3 काम नहीं करता?

  • memset प्रत्येक बाइट को मान 3 (0x03) पर सेट करता है
  • int आमतौर पर 4 बाइट्स का होता है: 0x03030303 = 50,529,027 (डेसीमल)
  • यही कारण है कि केवल 0 (0x00) और -1 (0xFF) सही काम करते हैं

सही विकल्प

// ऐरे को किसी मान से भरने के लिए
#include 
fill(begin(array), end(array), 3); // सही तरीका

// या C++20 में
ranges::fill(array, 3);

// वेक्टर के लिए
vector v(10, 3); // कंस्ट्रक्टर में ही मान दें

सावधानियां

  • केवल POD (Plain Old Data) टाइप्स के लिए उपयोग करें
  • क्लास ऑब्जेक्ट्स, std::string, वेक्टर आदि पर नहीं उपयोग करें
  • वर्चुअल फ़ंक्शन वाले ऑब्जेक्ट्स पर उपयोग करने से वीटेबल पॉइंटर करप्ट हो जाएगा
  1. - C++ में Switch स्टेटमेंट: एक पूर्ण गाइड

    C++ में Switch स्टेटमेंट का उपयोग कैसे करें कंडीशनल स्टेटमेंट्स सभी प्रोग्रामिंग भाषाओं की एक सामान्य विशेषता हैं। इन स्टेटमेंट्स का उपयोग प्रोग्राम के प्रवाह को नियंत्रित करने और यह निर्दिष्ट करने के लिए किया जाता है कि कोड के विशिष्ट ब्लॉक्स कब निष्पादित होने चाहिए। C++ में उपयोग किए जाने वाले मुख

  1. - C++ में मितव्ययी संख्या (Frugal Number)

    इस समस्या में, हमें एक धनात्मक पूर्णांक N दिया गया है। हमारा कार्य यह जांचने के लिए एक प्रोग्राम बनाना है कि दी गई संख्या मितव्ययी संख्या है या नहीं। मितव्ययी संख्या (FRUGAL NUMBER) − एक संख्या जिसके अंकों की संख्या उस संख्या के अभाज्य गुणनखंडन में अंकों की संख्या से सख्ती से अधिक है। उदाहरण &

  1. C++ में पेंटाटोप संख्या C++ में पेंटाटोप संख्या

    एक पेंटाटोप संख्या को पास्कल के त्रिभुज में पांचवीं संख्या के रूप में वर्णित किया गया है। अब, चूंकि यह पांचवीं संख्या है, इसका मतलब है कि पास्कल के त्रिभुज में कम से कम पांच संख्याएं होनी चाहिए, इसलिए इस श्रृंखला की पहली संख्या 1 4 6 4 1 से शुरू होती है जो पास्कल के त्रिभुज की चौथी पंक्ति है। तो, इस