It’s a shame I can’t figure out such basic thing about c++, but c-style strings are acting as I wouldn’t expect. For example, I create it like this:
char* cstr = new char[1];
It’s initialized to: Íýýýýý««««««««îţ . Like normal, I can set just first char because others are not really existing (or I thought that they aren’t). While working whit c-style strings all this junk is ingored and everything works fine.
Now I mixed std::string whit those c-stlye one and what I get is a mess. Whit this code:
std::string str = "aaa";
str += cstr;
I end up whit: aaaÍýýýýý««««««««îţ , but now those characters actually exist as string.size() returns length including this junk.
I can’t find why is this happening, but it must be connected whit string creating, because something like char* cstr = “aaa” results in aaa without any additional junk, but trying to change string initialized this way results in memory access violation. Could someone explain me this behavior please? Thanks!
PS: My JavaScript Failed to load so if someone could format this post properly, I’d be glad!
Answer: Oh god! How could I forget on that… thanks to all for, well, immediate answer. Best one was from minitech so I’ll mark this as answer as soon as my java script loads up :/
All C-style strings are null-terminated. So, a string initialized using
new char[1]leaves you space for no characters. You can’t set the first character to anything but\0, otherwise normal string operations will keep reading into memory until they find a zero. So usenew char[2]instead.