제 배경은 대부분 C이고 아직 Zig를 처음 사용하기 때문에 C와 Zig가 대화하는 데 필요한 유형 변환 중 일부가 처음에는 명확하지 않았습니다. 이제 그 내용을 이해하게 되었으며, 도움이 필요한 다른 분들에게 도움이 되기를 바라며 간략한 요약을 제공하겠습니다.
Zig에서 C 문자열 유형이 무엇인지부터 시작해 보겠습니다. C 문자열을 표시하는 방법에는 2가지1권장 방법이 있습니다.
// Sentinel slice of unknown amount [*:0]const u8 // Slice of unknown amount [*]const u8
문자열이 null로 종료될 것으로 예상된다면 std.mem.span 함수를 사용하여 Zig 슬라이스로 변환할 수 있는 첫 번째 옵션이 필요합니다. 그렇지 않으면 일반적으로 내보낸 함수에 길이 매개변수를 전달하여 조각별 길이를 얻을 수 있도록 하는 두 번째 옵션이 필요할 것입니다.
예:
export pub fn test_c_string(str: [*:0]const u8) void { const local_slice: []const u8 = std.mem.span(str); // rest of function }
export pub fn test_c_string(str: [*]const u8, len: usize) void { const local_slice: []const u8 = str[0..len]; // rest of the function }
C 문자열 요구 사항에 대해 알아야 할 전부입니다. Zig의 나머지 문자열은 별다른 개입 없이 상당히 쉽게 Zig 슬라이스/배열 유형 간에 변환할 수 있습니다.
처음에 나를 혼란스럽게 했던 한 가지 유형은 배열 센티널 유형(예: [5:0]const u8)이었습니다. 왜냐하면 [*:0]const u8과 유사하다고 가정했지만 차이점은 컴파일 시간 길이(예: 5)입니다. 이 슬라이스를 알려진 길이로 변환하므로 Zig는 유사한 유형 간의 슬라이스 변환을 쉽게 수행할 수 있습니다.
위 내용은 빠른 Zig 및 C 문자열 변환 수수께끼의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!