我只想创建一个带有可变字符串(utf-8 文本)的结构。
const Person = struct {
name: [_]u8,
};
可能吗?或者我必须设置字符串的最大长度(例如name: [255]u8;
)?当我传递给编译器时,它说:
person.zig:5:12: error: unable to infer array size
name: [_]u8,
无论如何,我想念原生字符串类型,而不必处理字节。有没有图书馆?
我只想创建一个带有可变字符串(utf-8 文本)的结构。
const Person = struct {
name: [_]u8,
};
可能吗?或者我必须设置字符串的最大长度(例如name: [255]u8;
)?当我传递给编译器时,它说:
person.zig:5:12: error: unable to infer array size
name: [_]u8,
无论如何,我想念原生字符串类型,而不必处理字节。有没有图书馆?
您可能正在寻找切片类型:[]u8
或[]const u8
. 切片类型包含一个指针和一个长度,因此该结构实际上并不直接保存字符串的内存,而是保存在其他地方。https://ziglang.org/documentation/0.9.1/#Slices
const Person = struct {
name: []const u8,
};
无论如何,我想念原生字符串类型,而不必处理字节。有没有图书馆?
有一些用于 zig 的字符串库,但这取决于您正在寻找的具体功能。如果您正在寻找字符串连接和格式化,您可能可以使用 zig 的内置 ArrayList
const std = @import("std");
const Person = struct {
name: std.ArrayList(u8),
};
test "person" {
const allocator = std.testing.allocator;
var person: Person = .{
.name = std.ArrayList(u8).init(allocator),
};
defer person.name.deinit();
try person.name.appendSlice("First ");
try person.name.appendSlice("Last");
try person.name.writer().print(". Formatted string: {s}", .{"demo"});
try std.testing.expectEqualSlices(u8, "First Last. Formatted string: demo", person.name.items);
}
如果您正在寻找字符串规范化等 unicode 函数,您可以使用Ziglyph 之类的库