【问题标题】:Nul terminated strings in character array字符数组中的 Nul 终止字符串
【发布时间】:2015-09-25 07:43:45
【问题描述】:

这个简单的 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 中处理这个问题的“正确”惯用方法是什么? (在打印、分配内存、转换为适当的字符串等方面?)

编辑: 我刚刚意识到我问了一个看起来非常相似的问题here,但我想这并不完全相同。

【问题讨论】:

    标签: d


    【解决方案1】:

    使用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]。确保还检查函数的返回值,以防缓冲区不够大。

    【讨论】:

    • 谢谢,这就是我一直在寻找的东西,但不知何故没有找到 :)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-08-18
    • 2020-02-16
    相关资源
    最近更新 更多