首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >D程序设计语言字符数组

D程序设计语言字符数组
EN

Stack Overflow用户
提问于 2009-02-17 14:19:46
回答 4查看 2.9K关注 0票数 7

这听起来可能很蠢。但是我的D编程语言有一个奇怪的问题。当我尝试创建这样一个新数组时:

代码语言:javascript
复制
import std.stdio;

void main()
{
    char[] variable = "value";
    writefln(variable);
}

DMD编译器总是给出以下错误:

test.d(5):错误:不能隐式地将类型不变(Char5u)的表达式(“值”)转换为char[]

知道为什么吗?我正在为Ubuntu使用2.014 alpha (可用的这里)。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2009-02-17 14:24:10

我在指南的数组部分进行搜索,这可能会有所帮助:

http://digitalmars.com/d/2.0/arrays.html#strings

代码语言:javascript
复制
char[] str1 = "abc";                // error, "abc" is not mutable
char[] str2 = "abc".dup;            // ok, make mutable copy
invariant(char)[] str3 = "abc";     // ok
invariant(char)[] str4 = str1;      // error, str4 is not mutable
invariant(char)[] str5 = str1.idup; // ok, make invariant copy

来自这里

票数 10
EN

Stack Overflow用户

发布于 2009-02-17 14:43:01

基本上,可以归结为字符串文本存储在内存的只读部分。char[]是“可变字符的可变数组”,如果写入该数组,将生成运行时崩溃。

所以编译器真的在这里保护你。

invariant(char)[]的意思是“一个可变的不变字符数组”,这正是它的意思。

PS:当您不需要它成为char[]时,您可能需要使用auto,如在auto variable = "value"中。让你不用去思考它的类型:)

票数 9
EN

Stack Overflow用户

发布于 2009-03-02 03:23:11

使用auto,不要担心类型是什么:

代码语言:javascript
复制
auto s = "some text";

让编译器来考虑类型。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/557011

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档