我只想創建一個帶有可變字串(utf-8 文本)的結構。
const Person = struct {
name: [_]u8,
};
可能嗎?或者我必須設定字串的最大長度(例如name: [255]u8;)?當我傳遞給編譯器時,它說:
person.zig:5:12: error: unable to infer array size
name: [_]u8,
無論如何,我想念原生字串型別,而不必處理位元組。有沒有圖書館?
uj5u.com熱心網友回復:
您可能正在尋找切片型別:[]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 之類的庫
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/434507.html
下一篇:按空間拆分列
