🦁

Zigでコマンドライン引数を受け取る

2023/10/30に公開

コード

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]u8Sentinel-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]u8Null文字のみが末尾に登場するutf-8の文字列の配列を表現しています。

Discussion