It seems that part of the goal of c2rust was to retain the C memory layout in memory. If that's not required, C arrays can be translated to Rust arrays. Except for some corner cases involving casts and pointer arithmetic, that should work, and generate much cleaner output code. You can detect those, at least. For pointer arithmetic, do the pointer arithmetic and convert it to a subscript before indexing. Then you have bounds checks.
This is a classic problem with computer language conversion - you lose the idioms of both the input language and the output language in translation.
This is a classic problem with computer language conversion - you lose the idioms of both the input language and the output language in translation.