You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
CStr should have a function like from_bytes_with_nul() that reads until the first '\0' #49107
When dealing with FFI (fixed char buffers in file formats that represent strings and passing fixed char buffers to C code to write chars to them up to a given max len) I often find myself doing this:
let end = s.iter().position(|&b| b == 0).map_or(0, |i| i + 1);CStr::from_bytes_with_nul(&s[..end])
Because if I pass the whole slice to it, it returns a FromBytesWithNulError.
There should be a function that combines both lines and read until the first '\0' byte in the slice.
Something like:
CStr::from_bytes_until_nul(slice)
And yes, I did write my own function for my use case but I find myself copying these two lines around into different projects dealing with FFI and I think it would make sense to have this (arguably) "basic functionality" in std's CStr :)
@kanekv are you talking about in C? Because in C char's sign is undefined. We use u8 because we treat them as bytes -- which are treated as unsigned 8 bit numbers.
@kennytm is there a possibility to accept such function inside CStr and not rely on a package for that ?
This is really a basic thing to have for any person that is dealing with fixed size char arrays, I totally agree with @GuillaumeGomez
@patrickelectric I agree. The reason that some functionality is offered by a thirdparty crate is not a valid reason to not have it in std.
Many functions in std could theoretically be factored out into other crates, but they are part of std for good reasons!
E.g. the boolinator crate provides a function to map a bool to an Option, but bool::then was still added to std, and for the same reason, the proposed CStr::from_bytes_until_nul should be added to std. :)
Activity
kennytm commentedon Mar 17, 2018
This has been proposed before as #20475, and closed because this is already supported by the package
c_fixed_string.GuillaumeGomez commentedon Mar 18, 2018
That's a bit sad and problematic that such a basic functionality isn't implemented on
CStrdirectly...kanekv commentedon Aug 16, 2018
Why does
from_bytes_with_nulaccept&[u8], whereascharby default is signed?czipperz commentedon Apr 12, 2019
@kanekv are you talking about in C? Because in C
char's sign is undefined. We useu8because we treat them as bytes -- which are treated as unsigned 8 bit numbers.patrickelectric commentedon Oct 7, 2020
@kennytm is there a possibility to accept such function inside
CStrand not rely on a package for that ?This is really a basic thing to have for any person that is dealing with fixed size
chararrays, I totally agree with @GuillaumeGomezBoscop commentedon Feb 13, 2021
@patrickelectric I agree. The reason that some functionality is offered by a thirdparty crate is not a valid reason to not have it in std.
Many functions in std could theoretically be factored out into other crates, but they are part of std for good reasons!
E.g. the
boolinatorcrate provides a function to map a bool to an Option, butbool::thenwas still added to std, and for the same reason, the proposedCStr::from_bytes_until_nulshould be added to std. :)tgross35 commentedon Aug 3, 2023
cstr_from_bytes_until_nulis now stable and available since 1.69.0: #107429