dChar Error
matheus
matheus at gmail.com
Fri Dec 30 21:54:38 UTC 2022
On Friday, 30 December 2022 at 15:28:05 UTC, Salih Dincer wrote:
> ... In this case, std.conv.to can be used for mutable dchars,
> right? For example, is this solution the right approach?
>
> ```d
> auto toDchar(S)(inout S str) {
> import std.conv : to;
> return str.to!(dchar[]);
> }
>
> void main() {
> auto str3 = "ÜÇ ON "d;
> auto str4 = "BİR İKİ BEŞ "d.dup;
> auto str5 = "DÖRT ALTI YEDİ ".toDchar;
>
> //str5.fun(5);
> }
> ```
Unfortunately I can't say because I'm not a skilled D programmer,
I use mostly as a C on steroids.
But yes I think it will generate a copy (mutable) based on this
test:
void main(){
import std.stdio;
import std.conv;
auto str1 = "BİR İKİ BEŞ ";
auto str2 = str1;
auto str3 = str2.to!(dchar[]);
writeln(str1, ", ", str1.ptr);
writeln(str2, ", ", str2.ptr);
writeln(str3, ", ", str3.ptr);
str3[0] = 'A';
writeln(str3, ", ", str3.ptr);
}
It prints:
BİR İKİ BEŞ , 5641226D8200
BİR İKİ BEŞ , 5641226D8200
BİR İKİ BEŞ , 7FB466EAE000
AİR İKİ BEŞ , 7FB466EAE000
So for str2 = str1 it is just a case of passing the reference,
and both are pointing to the same address, while in the case of:
"str3 = str2.to!(dchar[]);", the address is different, and
accepts changing its content (str3[0] = 'A').
In the docs: https://dlang.org/phobos/std_conv.html#to
"String to string conversion works for any two string types
having (char, wchar, dchar) character widths and any combination
of qualifiers (mutable, const, or immutable)."
But I couldn't find if the target will be mutable, but I think it
will be, unless explicitly otherwise with a cast I believe.
Anyway I would wait and see if someone more skilled could shed a
light.
Matheus.
More information about the Digitalmars-d-learn
mailing list