+ 2
Why do online compilers e.g Programiz sometimes get different outputs from code editors like Visual Studio Code?
I was trying to compile this and I was shocked. Online gdb/Programiz/Paiza.io's outputs were all hlpmme, not hlp me. This app and Visual Studio ran the code well, so I really do not understand what happened. char s[300]="help me"; strcpy(s+1, s+2); cout<<s; I also had a similar issue a long time ago when I was working with floats.
6 ответов
+ 5
Brian There is no "correct" output in this scenario, since calling strcpy() with overlapping strings is undefined behaviour. Also, s + 1 is not the same as s[1], since the resulting pointer is not dereferenced.
+ 4
Thanks Ipang. Shadow thanks for your reply. Now I understand that not all implementations use safe memory moves that properly handle overlapped memory regions. I think you happened to see my reply about s[1] before I edited it to add the pointer reference. Nonetheless, thank you for pointing that out, too.
I had begun typing up an explanation, but I think the Stack Overflow link covers it better.
+ 2
What does adding an integer to a char array mean in C++?
+ 2
Denis as you expected, the correct output from any compiler and string library should be "hlp me". It seems that Programiz has a bizarre version of strcpy that skips past whitespace. I have never seen that before. It is perplexing to imagine why that would be useful.
Lisa s+1 is doing pointer math. It is the same as &(s[1]).
+ 2
Its not cause of the compiler... U might even get different result on same compliler in thi situation