samedi 28 octobre 2023

Overloading operator>> with chaining taking multiple inputs [duplicate]

Aim of the below code is to take input strings of any length from cin (or for tha matter input stream)

istream& operator>>(istream& is, MyString& rhs)
{
    cout << __PRETTY_FUNCTION__ << endl;
    
    size_t inpChunkSize{256};
    size_t allocCap{256};
    size_t totReadBytes{0};

    char *tmpHoldingBuff{nullptr};


    char *input = new char[allocCap];

    while(!cin.eof())
    {
        cin.read(input + totReadBytes, inpChunkSize);
        totReadBytes += cin.gcount();

        // if 256 bytes have been used up, then new chunk has to be allocated. 
        if (cin.gcount() == inpChunkSize)
        {
            allocCap += inpChunkSize;

            tmpHoldingBuff = new char[allocCap];
            strncpy(tmpHoldingBuff, input, totReadBytes);
            
            delete [] input;
            
            input = tmpHoldingBuff;
        }
    }
    
    rhs = MyString(input);
    rhs.display();

    return is;
}

int main(int argc, char *argv[])
{
    
    MyString s1, s2;
    cin >> s1 >> s2;
    
    return 0;
}

I want s1 and s2 to be input just like we do for say int's.

But I see that once I input one string and do ^D, then input for s2 is never asked and it is initialised to null

What wrong is happening here ?

$ ./Misc/OLNonMembFuncs 
std::istream& operator>>(std::istream&, MyString&)
This is s1^D(This is s1)
std::istream& operator>>(std::istream&, MyString&)
()

Aucun commentaire:

Enregistrer un commentaire