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

2023-12-19

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

现在它可以编译,但我只是得到垃圾。

我认为这是因为它在字符串中存储了一个指向临时缓冲区的指针。我不想这样做,我想将字符复制到字符串中,但令人烦恼的是我似乎找不到如何做到这一点?

所以问题:

  1. 如何从正确分配存储的 char 数组构造实际字符串? (复制字符)

  2. 像这样分配随机大小的缓冲区并转换为字符串看起来很难看。在 D 中是否有正确的方法来做到这一点? (我说的是一般性问题,不是专门针对这个 API,以防万一有另一个 API 可以获取计算机名称)。

  3. 如果手册中回答了其中任何一个问题,我应该在哪里查找详细信息?

感谢您的任何帮助和建议。


我认为你需要:

string name()
{
   char buffer[100];
   uint size = 100;

   GetComputerNameA(buffer.ptr, &size);

   return buffer[0 .. size].idup;
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

将临时字符数组转换为 D 中的字符串 的相关文章

  • Qt中Q_D宏及d指针

    原文标题 d指针在Qt上的应用及实现 原文链接 http blog csdn net rabinsong article details 9474859 正文 Qt为了使其动态库最大程度上实现二进制兼容 引入了d指针的概念 那么为什么d指针
  • D2 语言准备好用于生产了吗? [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • D语言:初始化动态多维数组最佳实践?

    只是好奇这是否是初始化动态多维数组的最佳实践D http www d programming language org index html 他们的语言参考中有一个关于数组的部分 但我不太确定它是否超出了我想要完成的目标 class Map
  • 延迟读取 D 中的文件

    我正在用 D 编写一个目录树扫描函数 它尝试将 grep 和 file 等工具结合起来 并且仅当文件中的内容满足条件时才对文件中的内容进行条件 grepnot匹配一组指示文件类型的魔术字节 例如 ELF 图像等 在最小化文件 io 方面 使
  • 附加到正在运行的进程的探查器?

    我需要一个适用于 Windows 和 Linux 的良好分析器 它们不必是同一个 针对每个操作系统的单独建议都可以 它可以附加到未以任何 特殊 方式编译的已运行进程 并给出我对进程花费大部分时间的函数进行统计 我有一些长时间运行的科学代码
  • SDL 窗口似乎被操作系统错误地标记为“无响应”

    我有一个通过 Derelict 3 访问的 SDL2 窗口 它应该是黑白频闪 不是因为我讨厌癫痫病患者 而且它成功地做到了这一点 然而 在一段时间后 Ubuntu 13 10 将窗口标记为 无响应 将其变灰 并使频闪效果变暗 这非常令人恼火
  • 处理传入消息的最佳方式是什么?

    我正在为一个在线游戏编写一个服务器 最终应该能够处理 1 000 2 000 个客户端 我发现做到这一点的三种方法基本上是 1 个线程 连接 阻塞 制作客户端列表 并循环它们 非阻塞 选择 基本上是一次针对所有客户端的阻塞语句 并带有可选超
  • 将一个函数中的可变参数传递给 D 中的另一个函数

    我有一个可变的 D 风格函数foo format 这是一个包装器writefln 我想做这样的事情 foo format lt gt writefln format 本质上 将省略号参数传递给 writefln 我知道这在 C C 中并不容
  • 泛型类型的签名约束

    struct S int a int b void fun T T t I want fun跟 共事S仅有的 签名约束是什么样的 我做不到fun的成员S 与void fun T T t if is T S I get Error struc
  • std.regex.regex 的返回值?

    我正在尝试编写一个函数 它接受一个输入字符串 一个正则表达式 由std regex regex来自原始字符串 和错误消息字符串 并尝试使用正则表达式匹配输入字符串中的某些内容 如果没有匹配则显示错误消息 到目前为止我想出了以下签名 stri
  • 将 SQLite 与 DMD 静态链接 (Windows x86)

    我尝试与 sqlite3 静态链接但没有成功 我正在使用 etc c sqlite3 标头和 sqlite3 合并 为了创建 lib 文件 我尝试了 VC 和 MinGW gcc 它们都成功编译了源文件 但它们都生成 COFF 对象格式 D
  • D 退出语句

    D有没有退出语句 类似于java python c c 中的退出语句 哪一个会 令人震惊 退出程序的执行 就像是exit 如果你想exit 然后使用Cexit功能 import core stdc stdlib void main exit
  • 通过 mixin 列出类的方法

    我想在 mixin 中列出一个类的方法 为此 我假设我必须打开 mixin 中包含源代码的文件 但找到该文件的名称比我想象的要难 我尝试使用 FILE 但它给出了 mixin 声明的文件 所以我必须在每个文件中定义 mixin 这没有任何意
  • 从 D 中的字符串获取普通 char*?

    我正在尝试弄清楚如何从 D 字符串 不可变 char 获取普通的可变 C 字符串 char 以便将字符数据传递给遗留的 C 代码 toStringz 不起作用 因为我收到一条错误 说我 无法将 immutable char 类型的表达式 t
  • D 中的枚举与不可变

    有什么区别 enum i 2 enum s Hello and immutable i 2 immutable s Hello 在 D 2 0 中 An enum是用户定义的类型 而不是变量 enum e 2 是一个 像这样的东西的简写en
  • D 中是否有相当于 C++ 的 Future/Promise ?

    D 世界中是否存在 C 世界中的未来 承诺等价物 当然有标准并行度 http dlang org phobos std parallelism html但它并不完全具有承诺 未来组合的功能 没有相当于获取未来或设置结果或异常的功能 您也不能
  • D 的写法是什么?

    我用 C 写了这个程序 http pastebay com 182597并且在二郎中 http pastebay com 185244 为了练习 我尝试用 D 重写 一个朋友也用 D 写了它 但是写得不同 https stackoverfl
  • mpi.h:使用未定义的类型?

    我正在尝试将 OpenMPI 的 mpi h 的重要部分翻译为 D 编程语言 以便我可以从 D 调用它 HTOD 根本不起作用 我无法理解以下代码段 typedef struct ompi communicator t MPI Comm O
  • D有“新类型”吗?

    D 是否有 newtype 如 Haskell 中 这是一个天真的问题 因为我只是浏览 D 但谷歌没有找到任何有用的东西 在 Haskell 中 这是一种在编译时使同一事物的不同类型变得不同的方法 但不会导致任何运行时性能损失 例如你可以为
  • 在 D 中执行“指向非 const 的 const 指针”的正确方法?

    好的 根据http dlang org const faq html head const http dlang org const faq html head const在 D 中没有办法有一个指向非 const 的 const 指针 但

随机推荐