gpt4 book ai didi

d - 将临时字符数组转换为D中的字符串

转载 作者:行者123 更新时间:2023-12-03 16:54:03 25 4
gpt4 key购买 nike

我正在学习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;
    }

    关于d - 将临时字符数组转换为D中的字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32220621/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com