创建一个带有 String 参数的结构

Create a struct with String parameter

我只想创建一个带有变量字符串(utf-8 文本)的结构。

const Person = struct {
    name: [_]u8, 

};

可能吗?或者我必须设置字符串的最大长度(例如 name: [255]u8;)?当我传递给编译器时,它说:

person.zig:5:12: error: unable to infer array size
    name: [_]u8,

无论如何,我想念本机 String 类型,而不必处理字节。有图书馆吗?

您可能正在寻找切片类型:[]u8[]const u8。切片类型包含一个指针和一个长度,因此该结构实际​​上并不直接保存字符串的内存,而是保存在其他地方。 https://ziglang.org/documentation/0.9.1/#Slices

const Person = struct {
    name: []const u8,
};

Anyway I miss native String type instead of having to handle with bytes. Is there any library for that?

有一些用于 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

这样的库