如何将字符串类型转换为字符数组
How to convert a string type to an array of chars
我正在尝试将一些 C 代码转换为 D,我遇到了这个:
char[] welcome = "\t\tWelcome to the strange land of protected mode!\r\n";
它给出了这个警告:
main.d:5:18: error: cannot implicitly convert expression ("\x09\x09Welcome to the strange land of protected mode!\x0d\x0a") of type string to char[]
5 | char[] welcome = "\t\tWelcome to the strange land of protected mode!\r\n";
| ^
如何在不单独输入数组中的每个字符的情况下执行此操作?
A string
is an array of characters. String literals are just an easy way to write character arrays. String literals are immutable
(read only).
char[] str1 = "abc"; // error, "abc" is not mutable
char[] str2 = "abc".dup; // ok, make mutable copy
immutable(char)[] str3 = "abc"; // ok
immutable(char)[] str4 = str1; // error, str4 is not mutable
immutable(char)[] str5 = str1.idup; // ok, make immutable copy
The name string is aliased to immutable(char)[]
, so the above declarations could be equivalently written as:
char[] str1 = "abc"; // error, "abc" is not mutable
char[] str2 = "abc".dup; // ok, make mutable copy
string str3 = "abc"; // ok
string str4 = str1; // error, str4 is not mutable
string str5 = str1.idup; // ok, make immutable copy
所以:
char[] welcome = "\t\tWelcome to the strange land of protected mode!\r\n".dup;
如前所述,字符串已经是一个字符数组。其实这里就是string
的定义:
alias string = immutable(char)[];
(来自object.d)
A string
因此与 char[]
的区别仅在于数组的内容是 immutable
.
- 根据您的目标,您可能根本不需要
char[]
,string
也可以。
- 如果您需要数组可写(即您希望
welcome[2] = 'x';
工作),那么使用 .dup
将在运行时创建一个副本。
- 有时 C 函数声明没有用
const
正确注释,并且不会接受指向不可变字符的指针。在这种情况下,使用 cast
是可以接受的。
- 我认为没有语言功能可以像
static char[] s = ['a', 'b', 'c'];
那样将字符串文字直接放置在可写数据段中,但它可能可以作为模板或 CTFE 函数使用。
我正在尝试将一些 C 代码转换为 D,我遇到了这个:
char[] welcome = "\t\tWelcome to the strange land of protected mode!\r\n";
它给出了这个警告:
main.d:5:18: error: cannot implicitly convert expression ("\x09\x09Welcome to the strange land of protected mode!\x0d\x0a") of type string to char[]
5 | char[] welcome = "\t\tWelcome to the strange land of protected mode!\r\n";
| ^
如何在不单独输入数组中的每个字符的情况下执行此操作?
A
string
is an array of characters. String literals are just an easy way to write character arrays. String literals are immutable (read only).char[] str1 = "abc"; // error, "abc" is not mutable char[] str2 = "abc".dup; // ok, make mutable copy immutable(char)[] str3 = "abc"; // ok immutable(char)[] str4 = str1; // error, str4 is not mutable immutable(char)[] str5 = str1.idup; // ok, make immutable copy
The name string is aliased to
immutable(char)[]
, so the above declarations could be equivalently written as:char[] str1 = "abc"; // error, "abc" is not mutable char[] str2 = "abc".dup; // ok, make mutable copy string str3 = "abc"; // ok string str4 = str1; // error, str4 is not mutable string str5 = str1.idup; // ok, make immutable copy
所以:
char[] welcome = "\t\tWelcome to the strange land of protected mode!\r\n".dup;
如前所述,字符串已经是一个字符数组。其实这里就是string
的定义:
alias string = immutable(char)[];
(来自object.d)
A string
因此与 char[]
的区别仅在于数组的内容是 immutable
.
- 根据您的目标,您可能根本不需要
char[]
,string
也可以。 - 如果您需要数组可写(即您希望
welcome[2] = 'x';
工作),那么使用.dup
将在运行时创建一个副本。 - 有时 C 函数声明没有用
const
正确注释,并且不会接受指向不可变字符的指针。在这种情况下,使用cast
是可以接受的。 - 我认为没有语言功能可以像
static char[] s = ['a', 'b', 'c'];
那样将字符串文字直接放置在可写数据段中,但它可能可以作为模板或 CTFE 函数使用。