字符数组中的 Nul 终止字符串

Nul terminated strings in character array

这个简单的 D 程序 :-

import std.stdio;
import core.sys.windows.windows;

void main()
{
    char data[100];
    uint size = 100;
    GetComputerNameA(&data[0], &size);
    writeln("Name is:", data, "with size of ", size);
}

打印计算机名称,然后打印字符数组其余部分的未初始化内容。它不会在 writeln 中将数据视为以 nul 结尾的字符串。

没关系,我可以看到很多方法来处理这个问题。 但是在 D 中处理这个问题的 "correct" 惯用方法是什么? (打印、分配内存、转换为正确的字符串等?)

编辑: 我刚刚意识到我问了一个看起来非常相似的问题 here 但我想这不是一回事。

使用std.string.fromStringz:

import std.stdio;
import std.string;
import core.sys.windows.windows;

void main()
{
    char[100] data;
    uint size = data.length;
    GetComputerNameA(&data[0], &size);
    data[$-1] = 0; // ensure null-terminated
    writeln("Name is: ", data.ptr.fromStringz);
}

在这种情况下,您可能希望使用 GetComputerName 的第二个参数,例如:data[0..size]。确保还检查函数的 return 值,以防缓冲区不够大。