Fix 076, add 077,078 sentinels and many-item pointers
This commit is contained in:
parent
71e43b0a50
commit
22ac3628a1
7 changed files with 126 additions and 35 deletions
27
exercises/078_sentinels3.zig
Normal file
27
exercises/078_sentinels3.zig
Normal file
|
|
@ -0,0 +1,27 @@
|
|||
//
|
||||
// We were able to get a printable string out of a many-item
|
||||
// pointer by using a slice to assert a specific length.
|
||||
//
|
||||
// But can we ever GO BACK to a sentinel-terminated pointer
|
||||
// after we've "lost" the sentinel in a coercion?
|
||||
//
|
||||
// Yes, we can. Zig's @ptrCast() builtin can do this. Check out
|
||||
// the signature:
|
||||
//
|
||||
// @ptrCast(comptime DestType: type, value: anytype) DestType
|
||||
//
|
||||
// See if you can use it to solve the same many-item pointer
|
||||
// problem, but without needing a length!
|
||||
//
|
||||
const print = @import("std").debug.print;
|
||||
|
||||
pub fn main() void {
|
||||
// Again, we've coerced the sentinel-terminated string to a
|
||||
// many-item pointer, which has no length or sentinel.
|
||||
const data: [*]const u8 = "Weird Data!";
|
||||
|
||||
// Please cast 'data' to 'printable':
|
||||
const printable: [*:0]const u8 = ???;
|
||||
|
||||
print("{s}\n", .{printable});
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue