The problem of C strings is that they are zero-terminated, not that they are byte buffers. Strings in Zig are foremost slice types (pointer/size pairs), but for C compatibility, Zig also has the concept of 'sentinel terminated arrays':
https://ziglang.org/documentation/master/#Sentinel-Terminate...
> how do you handle an umlaut in zig
Via UTF-8 encoding, as it should be.
> cmake...
I use cmake for my C and C++ stuff too because it's the defacto standard, but Rust's cargo or Zig's integrated build system are on a whole different level.