mirror of
				https://github.com/rust-lang/rust.git
				synced 2025-10-31 04:57:19 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			20 lines
		
	
	
		
			604 B
		
	
	
	
		
			Rust
		
	
	
	
	
	
			
		
		
	
	
			20 lines
		
	
	
		
			604 B
		
	
	
	
		
			Rust
		
	
	
	
	
	
| use std::borrow::Cow::{Borrowed, Owned};
 | |
| use std::ffi::CStr;
 | |
| use std::os::raw::c_char;
 | |
| 
 | |
| #[test]
 | |
| fn to_str() {
 | |
|     let data = b"123\xE2\x80\xA6\0";
 | |
|     let ptr = data.as_ptr() as *const c_char;
 | |
|     unsafe {
 | |
|         assert_eq!(CStr::from_ptr(ptr).to_str(), Ok("123…"));
 | |
|         assert_eq!(CStr::from_ptr(ptr).to_string_lossy(), Borrowed("123…"));
 | |
|     }
 | |
|     let data = b"123\xE2\0";
 | |
|     let ptr = data.as_ptr() as *const c_char;
 | |
|     unsafe {
 | |
|         assert!(CStr::from_ptr(ptr).to_str().is_err());
 | |
|         assert_eq!(CStr::from_ptr(ptr).to_string_lossy(), Owned::<str>(format!("123\u{FFFD}")));
 | |
|     }
 | |
| }
 | 
