字符数组中的 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 但我想这不是一回事。
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 值,以防缓冲区不够大。
这个简单的 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 但我想这不是一回事。
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 值,以防缓冲区不够大。