[入门] 从hollo world 开始,就遇到问题

player7 2007-04-20
啊,不保证....
那这个自动转换是什么意思啊?
qiezi 2007-04-20
实际上不是自动转换,是隐式类型转换。
achun 2007-04-20
qiezi 写道
cast(char*)转换和直接str.ptr是一样的,不保证有\0结尾,除非运气好刚好碰上一个。

这个好像不是碰巧呀!
phobos下总会遇到\0
tango下就经常遇不到了,
难道是phobos初始化exe的时候自动吧内存fill 0 了!
而tango没有!
qiezi 2007-04-20
char[] a = "abc";
char[] b = a[0..2];
writefln(b.length);
writefln(b);
printf(b);

看一下这个结果。它们的处理方式都是合理的,因为这种都属于未定义行为,由编译器或库自己决定如何实现。你要做的就是避免这种未定义的东西。
achun 2007-04-20
qiezi 写道
char[] a = "abc";
char[] b = a[0..2];
writefln(b.length);
writefln(b);
printf(b);

看一下这个结果。它们的处理方式都是合理的,因为这种都属于未定义行为,由编译器或库自己决定如何实现。你要做的就是避免这种未定义的东西。

谢谢,我想这才是正确的答案,
我又仔细的看了看tango的
How to Migrate from Phobos to Tango
试着写了这样的hello
import tango.io.Stdout;
void main(char[][] args)
{
  Stdout.formatln("hello {0} 呀!", args[0]).newline;
}

执行结果倒是正常了.而且中文也OK.
那我问问,在tango下,上面的写法有没有您前面说的未定义的安全性呢?

另外我在CMD下直接到exe的目录去执行的时候结果
仍然是不带路径的,
phobos的就代路径,
呵呵tango下要准确的获取自己的路径看来还要用API呀!
qiezi 2007-04-20
那就不知道咯,tango重写了dmain2.d这个文件,可能把参数用GetCommandLineW转换掉了,还处理了字符集,可能避免乱码了,不过可能导致了这里的问题。linux版本这个地方没有修改。
Global site tag (gtag.js) - Google Analytics