I’m currently writing a socket program in C++ and I’ve stumbled across very strange behavior when trying to write to the console (a required task), for some reason.
cout << themsg[0] << themsg[1] << endl;
cout << "Phase 3: Supernode sent the message " << themsg[0] << " on dynamic port number " << themsg[1] << endl;
themsg[0] is the string “User#2:What’s up Dick?”
themsg[1] is the string “39416”
The first line should write “User#2:What’s up Dick?” to the console, followed by “39416”.
The second line should print “Phase 3: Supernode sent the message User#2:What’s up Dick? on dynamic port number 39416”
The console output reads as follows:
394162:What's up Dick?
on dynamic port number 39416essage User#2:What's up Dick?
I know that themsg[0] and themsg[1] are correct because I wrote their values to a file for verification. It surely has to be some weird stdout issue.
For the first line it appears the 5 characters of themsg[1] overwrite the first five characters of themsg[0]. For the second line, it appears that the first two parameters for cout are ignored, and then there is a message fragment appended.
If anyone can help, I would really appreciate it. I tried using flush() but to no avail. I’m not really sure how the output buffer works, so I’m really lost with this.
You probably have a carriage return symbol,
\r, at the end ofthemsg[0]. I can reproduce the behavior with the following program on Linux:The
\r, when not followed by\n, has the effect of returning the virtual “carriage” of the terminal to the beginning of the line, so the next print will overwrite what was already there. You won’t see this showing up in a file, though, as the file will just contain both strings including the CR.Strip off the
\rbefore printing.