🦁
Zigでコマンドライン引数を受け取る
コード
const std = @import("std");
const stdout = std.io.getStdOut().writer();
pub fn main() !void {
const allocator = std.heap.page_allocator;
const args = try std.process.argsAlloc(allocator);
defer std.process.argsFree(allocator, args);
try stdout.print("Args: {s}\n", .{args});
}
解説
特にありません。
おまけ
std.process.argsAllocが返す型
const args = try std.process.argsAlloc(allocator);
でargsの型は[][:0]u8
です。(= [:0]u8
のスライス)
ここの[:0]u8
はSentinel-Terminated-Sliceです。
The syntax [:x]T is a slice which has a runtime-known length and also guarantees a sentinel value at the element indexed by the length. The type does not guarantee that there are no sentinel elements before that. Sentinel-terminated slices allow element access to the len index.
大胆や意訳↓
[:x]Tはランタイムが長さを知っている
かつスライスの最後のみでxが表れる
スライスです。
[:0]u8
は\0
(Null文字)が末尾(i == slice.len
)のみに頂上するスライスを意味します。
u8はUTF-8のCharを表現するときに使える型なので、
[][:0]u8
は Null文字のみが末尾に登場するutf-8の文字列の配列
を表現しています。
Discussion