[入门] 从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版本这个地方没有修改。
|