我正在学习D语言(我对C++很熟悉)... 我想做一些Windows特定的东西,所以我写了这个程序来尝试API:
import core.sys.windows.windows;
import std.stdio;
string name()
{
char buffer[100];
uint size = 100;
GetComputerNameA(&buffer[0], &size);
return buffer;
}
void main()
{
writeln(name());
}
我在返回语句中获得的内容:
test.d(11): Error: cannot implicitly convert expression (buffer) of type char[100] to string
好的,在C++中,它将调用构造函数来创建一个字符串。因为它是隐式的,所以让我们使用C语言风格的转换方式:return (string)buffer;
。
test.d(11): Error: C style cast illegal, use cast(string)buffer
啊,好的,我记得了,语法不同。
return cast(string)buffer;
现在代码编译通过,但输出的结果却是一些垃圾字符。我猜测这是因为代码将一个指针存储到了字符串中的临时缓冲区。我不想这样做,我想将字符复制到一个字符串中,但令人烦恼的是我似乎找不到如何实现这一点的方法?
所以我的问题是:
- 如何从字符数组构建一个真正意义上的字符串,能够正确分配存储空间并复制字符?
- 像这样随意分配缓冲区大小并转换为字符串似乎很丑陋,D语言中是否有更好的方法呢?(我说的是一般性的问题,不仅限于这个API,只是为了防止还有其他获取计算机名称的API)
- 如果这些问题的答案已经在手册中提供了,请问我应该在哪里查找相关细节?
buffer
的实际值,因为转换不应该失败。 - BaussError: escaping reference to local variable buffer
。 - sigodtype[...] name
。 - sigod