Here is an in-depth article explaining how rust’s memory safety works. Like, what is it actually protecting and how does it work?
Example of converting C programs to rust over time using TinyVM as the example. Using Cargo to build the C program and then replacing the C functions and structs with rust ones then disabling that part of the C code you can eventually replace the whole C program piece by piece. You can also write tests to ensure that before and after the change the code works the same.
Zig is another language which is attempting to replace C (like Rust), but does not have all the same safety features.
One of the main contributors suggests replacing the build systems of C projects with Zig to make cross-compilation easier as well as enabling the use of Zig on the projects to slowly replace C without requiring a rewrite.