这个简单的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,但我想这不是一回事。
答案 0 :(得分:1)
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]
。如果缓冲区不够大,请务必检查函数的返回值。