我正在学习 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;
现在它可以编译,但我只是得到垃圾。
我认为这是因为它在字符串中存储了一个指向临时缓冲区的指针。我不想这样做,我想将字符复制到字符串中,但令人烦恼的是我似乎找不到如何做到这一点?
所以问题:
如何从正确分配存储的 char 数组构造实际字符串? (复制字符)
像这样分配随机大小的缓冲区并转换为字符串看起来很难看。在 D 中是否有正确的方法来做到这一点? (我说的是一般性问题,不是专门针对这个 API,以防万一有另一个 API 可以获取计算机名称)。
如果手册中回答了其中任何一个问题,我应该在哪里查找详细信息?
感谢您的任何帮助和建议。
我认为你需要:
string name()
{
char buffer[100];
uint size = 100;
GetComputerNameA(buffer.ptr, &size);
return buffer[0 .. size].idup;
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)