Hi.
I want to form a string in memory, as in C:
char buf[32];
int k = 7;
sprintf(buf, "item-%d", k);
But I do not understand what tools from stdlib should be used for that
Will be glad to see some advice.
Hi.
I want to form a string in memory, as in C:
char buf[32];
int k = 7;
sprintf(buf, "item-%d", k);
But I do not understand what tools from stdlib should be used for that
Will be glad to see some advice.
std.fmt.bufPrint
is what you want:
const std = @import("std");
pub fn main() !void {
var buf: [32]u8 = undefined;
const slice = try std.fmt.bufPrint(&buf, "Hello {s}", .{"World!"});
std.log.info("{s}", .{slice});
}
Note that bufPrint
returns a slice to the bytes written into buf
, so itβs linked to buf
and if buf
changes or is freed, slice
will reflect those changes or will be invalid.
std.fmt.allocPrint
should also be mentioned. Which to use depends on the desired behavior.
std.fmt.bufPrint
prints to a pre-allocated buffer, saving a runtime allocationstd.fmt.allocPrint
requires a runtime allocation, but might be more appropriate if the length required cannot be reliably guessed at compile time.