const zigString: []const u8 = std.mem.span(c_string);
const c_string: [:0]u8 = try allocator.dupeZ(u8, zigString);
std.mem.span 함수는 c 문자열에서 c문자열이 0으로 끝나는 지점(길이) 까지 문자열 slice로 변환해줍니다. 이때 같은 메모리 공간을 사용하므로 추가적인 할당은 없습니다.(결과 slice에는 0이 포함되지 않음.)
allocator.dupeZ 함수는 zig string(위에 말했던 slice 문자열)을 0으로 끝나는 c_string으로 변환해줍니다. 이때는 뒤에 0이 들어갈 공간이 있어야 하기 때문에 길이+1만큼 메모리를 할당해서 복사해서 줍니다.
'Zig' 카테고리의 다른 글
tag union으로 타입마다 함수 호출하기 (0) | 2024.10.31 |
---|---|
임의의 크기 행렬 구현 (0) | 2024.07.17 |