我目前正在学习 Zig(在 C 方面的经验很少),我正在用字符串做一些实验,以确保我正确理解这个概念。
例如,由于字符串是数组,u8
我发现我可以使用以下代码打印字符“C”:
std.debug.print("{}", .{[_]u8{67}});
然后我尝试制作一个循环来打印一些基本字符,代码范围从 33 到 126:
var i: u8 = 33;
while (i < 127) {
std.debug.print("{}", .{[_]u8{i}});
i += 1;
}
但是当我运行它时,会发生以下错误:
Segmentation fault at address 0x202710
/home/cassidy/learning-zig/hello-world/src/main.zig:9:39: 0x22ae15 in main (main)
std.debug.print("{}", .{[_]u8{i}});
^
/snap/zig/2222/lib/zig/std/start.zig:272:37: 0x204b9d in std.start.posixCallMainAndExit (main)
const result = root.main() catch |err| {
^
/snap/zig/2222/lib/zig/std/start.zig:143:5: 0x2048df in std.start._start (main)
@call(.{ .modifier = .never_inline }, posixCallMainAndExit, .{});
^
[1] 24766 abort (core dumped) ./main
最奇怪的是,当我稍微更改代码以创建一个保存u8
数组的变量时,它会按预期工作:
var i: u8 = 33;
while (i < 127) {
const c = [_]u8{i};
std.debug.print("{}", .{c});
i += 1;
}
回报:
!"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~
有人可以解释为什么第二个代码会触发段错误吗?