On 2011-06-10 19:56, Jonathan Sternberg wrote: > Why doesn't this work? > > import std.stdio; > > string copy_string(char [] input) > { > return input.dup; > } > > int main() > { > char [] buf = ['h', 'e', 'l', 'l', 'o']; > writeln( copy_string(buf) ); > } > > I want to do something more complex. In my code, I want to have a dynamic > array that I can append stuff into and then return it as a string. In C++, > a non-const variable can be implicitly converted into a const. I know > string is an alias for const char. Is there a reason why it won't > implicitly convert it? > > I hesitate to use cast for this type of thing as it probably indicates I'm > doing something fundamentally wrong as I'm just starting to learn the > language.
Hi, You can append to a string. You only need char[] if you have to modify individual characters. // idup fixes your specific problem string copy_string(char [] input) { return input.idup; } string build_string(string str1, string str2){ string result; result~=str1; foreach(i;0..3) result~=str2; return result; } unittest{ assert(build_string("hi","lo") == "hilololo"); } If you really need char[] and you know that there is only one mutable reference to your data, then you can use std.exception.assumeUnique. (No idea why it is *there* though) import std.exception; string toUpper(char[] str){ char[] result = str.dup; foreach(ref x;result) if('a'<=x && x<='z') x+='A'-'a'; return result.assumeUnique(); // this is only safe if there really is only one reference to your data } Timon