[疑难] 请教char[]问题
my3world
2008-10-22
系统:ubuntu8.04 gdc (GCC) 4.2.4 20080519 (prerelease gdc 0.25 20071215, using dmd 1.022) (Ubuntu 0.25-4.2.4-1ubuntu1)
|
|
ideage
2008-10-22
xp,dmd1.031,没有错误.可以运行.
|
|
my3world
2008-10-22
感谢ideage兄
那应该是编译器不同出的问题了。 我的是“using dmd 1.022”。 |
|
Colorful
2008-10-22
请注意 DMD 编译器在 Linux 和 Windows 上的区别。
不论是 D 1.0 还是 D 2.0,查看官方文档,都可以发现这句话: 引用 Differences between Windows and Linux versions
String literals are read-only under Linux. Attempting to write to them will cause a segment violation. |
|
my3world
2008-10-23
|
|
my3world
2008-10-23
语言底层的代码居然会因为系统的不同而出现错误,好像让人有点失望。一门好的高级语言不应该是与平台无关的吗?
|
|
store88
2008-10-24
my3world 写道 语言底层的代码居然会因为系统的不同而出现错误,好像让人有点失望。一门好的高级语言不应该是与平台无关的吗?
有人说平台无关是我们太天真,JAVA的跨平台不过是一厢情愿,只不过运行依靠的RUNTIME是不一样的而已,Dlang也一样 |
|
oldrev
2008-10-24
my3world 写道
系统:ubuntu8.04 gdc (GCC) 4.2.4 20080519 (prerelease gdc 0.25 20071215, using dmd 1.022) (Ubuntu 0.25-4.2.4-1ubuntu1)
字符串常量是指针,因为编译时长度可知,不需要数组类型的长度分量。
修改字符串常量行为本身是错误的做法,按 C 和 C++ 标准的说法叫“未定义行为”,这跟跨不跨平台没关系,也怨不着 D 的事 |
|
hqs7636
2008-10-24
oldrev 对细节的态度实在佩服
|
|
my3world
2008-10-25
oldrev 写道
my3world 写道
系统:ubuntu8.04 gdc (GCC) 4.2.4 20080519 (prerelease gdc 0.25 20071215, using dmd 1.022) (Ubuntu 0.25-4.2.4-1ubuntu1)
字符串常量是指针,因为编译时长度可知,不需要数组类型的长度分量。
修改字符串常量行为本身是错误的做法,按 C 和 C++ 标准的说法叫“未定义行为”,这跟跨不跨平台没关系,也怨不着 D 的事 oldrev兄,我并不是干点修改字符串常量什么的事,我要修改的是我自己定义的char[]数组里面的一个元素的值。难道我写了char[] x = "Hello"; 这句不应该是指定一个数组来让我存放、修改数据,而是弄了一个char指针来指向一个字符串常量?
我的确说错了一点,在linux和windows下都能编译通过说明语言本身没有问题,运行时错误是应该是编译器的实现问题。对不起了。 附上:为什么这么多个版本都没有改正呢?
|