Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

putback fails for stringstream while adding extra char

I have following code snippet to modify the stringstream such that it will have additional one char infront. But, i couldn't get the expected result.

void modifyStream(std::istream& s1)
{
    if (s1.putback('Y'))
       std::cout << s1.rdbuf() << '\n';
    else
       std::cout << "putback failed\n";
}

int main(int argc, const char * argv[])
{

  const char* str = "Hello, world";
  std::stringstream s1(str); // IO stream
  modifyStream(s1);

  return 0;
}

Output: putback failed

But, i am expecting the output of "YHello, world". Can someone help to resolve this?

like image 759
Karthick Avatar asked Dec 05 '25 05:12

Karthick


1 Answers

There is a misunderstanding about the putback method in your code: Its purpose is not to prepend data to the stream but to replace one already extracted character with another (you do not add anything, you replace an old character with something new). This is a bit more understandable by reading the documentation of sputbackc which is called by putback.

Example (from encppreference):

std::stringstream s1("Hello, world"); // IO stream
s1.get();
if (s1.putback('Y')) // modifies the buffer
    std::cout << s1.rdbuf() << '\n';
else
    std::cout << "putback failed\n";

Output:

Yello, world

The call s1.putback('Y') puts the character 'Y' back at the place of the last extracted character (in this case 'H').

like image 59
Holt Avatar answered Dec 07 '25 20:12

Holt



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!