Как объединить два строковых литерала во время компиляции в Zig?

Как объединить следующие строки, длина которых известна во время компиляции в Zig?

const url = "https://github.com/{}/reponame";
const user = "Himujjal";
const final_url = url + user; // ??

person Himujjal    schedule 08.03.2021    source источник


Ответы (2)


Оператор объединения массивов для двух строк, известных во время компиляции:

const final_url = "https://github.com/" ++ user ++ "/reponame";

std.fmt.comptimePrint для строк и чисел, известных в comptime, и других форматируемых вещей:

const final_url = comptime std.fmt.comptimePrint("https://github.com/{}/reponame", .{user});

Время выполнения с распределением:

const final_url = try std.fmt.allocPrint(alloc, "https://github.com/{}/reponame", .{user});
defer alloc.free(final_url);

Время выполнения, без распределения, с максимальной длиной, известной во время компиляции:

var buffer = [_]u8{undefined} ** 100;
const printed = try std.fmt.bufPrint(&buffer, "https://github.com/{}/reponame", .{user});
person pfg    schedule 17.03.2021

Это легко сделать. Отсутствие исследований породило этот вопрос. Но кому интересно.

const final_url = "https://github.com/" ++ user ++ "/reponame";

Для получения дополнительной информации перейдите по ссылке: comptime в ZIG.

person Himujjal    schedule 08.03.2021