gav*_*vin 5 string unicode zig
我刚刚开始使用 Zig,并且来自 C++ 和 Rust;
我很早就被一个似乎无法解决的难题所困扰。或者在互联网上找到任何地方。
这就是我所拥有的:
// this doesn't work
pub const User = struct {
bot: bool,
id: *const [*:0]u8,
username: *const [*:0]u8,
pub fn init() User {
return User {
.bot = false,
.id = "THIS_IS_ID",
.username = "THIS_IS_USERNAME"
};
}
...
}
const user = User.init();
// this works vvv
id: *const [10:0]u8,
.id = "THIS_IS_ID",
Run Code Online (Sandbox Code Playgroud)
这是我得到的错误:
// this doesn't work
pub const User = struct {
bot: bool,
id: *const [*:0]u8,
username: *const [*:0]u8,
pub fn init() User {
return User {
.bot = false,
.id = "THIS_IS_ID",
.username = "THIS_IS_USERNAME"
};
}
...
}
const user = User.init();
// this works vvv
id: *const [10:0]u8,
.id = "THIS_IS_ID",
Run Code Online (Sandbox Code Playgroud)
我试图摆脱提出这个问题的目标是知道zig 中是否可以有动态字符串;如果是这样,怎么会这样?我在网上看到了一些自定义字符串结构,但想知道是否有一种方法可以实现此目的,而无需为其创建单独的类型/结构..?
谢谢您的帮助!
使用[]const u8或[]u8. 请参阅切片文档。
有何const变化:
// Can assign string literals
var id: []const u8 = "THIS_IS_ID";
// vs
// var id: []u8 = "THIS_IS_ID";
// ^~~~~~~~~~~~
// error: expected type '[]u8', found '*const [10:0]u8'
// note: cast discards const qualifier
// But cannot change individual bytes
std.mem.copy(u8, id, "THIS_IS_ANOTHER_ID");
// ^~
// error: expected type '[]u8', found '[]const u8'
// note: cast discards const qualifier
Run Code Online (Sandbox Code Playgroud)
你必须决定什么拥有内存:
| 归档时间: |
|
| 查看次数: |
1561 次 |
| 最近记录: |