On Mon, Dec 13, 2021 at 08:58:42PM +0000, forkit via Digitalmars-d-learn wrote: [...] > immutable(char)[] replaceChar(char* str, ulong len, char ch1, char ch2) > { > for (ulong i = 0; i < len; i++) > { > if (str[i] == ch1) > { > writefln("Found %c at str[%d]", ch1, i); // fine > str[i] = ch2; > } > } > return to!(immutable(char)[])(str);
This line is your problem: you have a raw pointer `str` and force-casting it to an array without specifying its length. Do not expect anything good to come of this. (In fact I'm surprised it .to even accepts such a thing!) What you should be doing is: return to!string(str[0 .. len]); Or just: return str[0 .. len].idup; T -- Being forced to write comments actually improves code, because it is easier to fix a crock than to explain it. -- G. Steele