当前位置: 首页 > news >正文

Rust 实战练习 - 1. 输入,输出,环境变量,字符,字符串

目标:

  • 获取程序命令行参数
  • 标准输入输出
  • 获取环境变量
  • 字符串,字符初步学习

cargo传递参数,需要加上--

use std::{env, ffi::OsString, io, io::Write};fn main() {println!("OS Env: {:?} => {:?}", env::current_dir().unwrap(), env::current_exe().unwrap());let cmdline = env::args().collect::<Vec<String>>().join(" ");println!("cmdline: {}", cmdline);let _cmdline2 = env::args_os().map(|v| v.into_string().unwrap()).collect::<Vec<String>>().join(" ");// Unix路径拼接, 不是拼接为 长路径!// /usr/bin:../a/b/1.txtprintln!("{:?}", env::join_paths(["/usr/bin", "../a/b/1.txt"]).unwrap());// cargo run -- -a 1 -b xxx --config --set 2// 操作系统有关的 OsStringfor arg in env::args_os() {  // OsStringlet a = arg.to_string_lossy();println!("{a}");}// 环境变量for vars in env::vars_os() { // (OsString, OsString)println!("{:?} \t\t=> {:?}", vars.0, vars.1);break;}// Rust基础类型Stringfor arg in env::args() {  // Stringprintln!("{arg}");}for vars in env::vars() { // (String, String)println!("{:?} \t\t=> {:?}", vars.0, vars.1);break;}println!("PATH={}", env::var("PATH").unwrap());// 使用标准输入输出let mut buf = String::new();let stdin = io::stdin();print!("\r\nPlease input your code: ");_ = io::stdout().flush();if let Ok(n) = stdin.read_line(&mut buf) {_ = io::stdout().write_all(format!("the input len: {} => {}", n, buf).as_bytes());}// 几种常见的字符串类型let a1 = "abc123"; // &strlet a2 = String::from(a1); // String, 会严格检查字符的UTF8范围let a3 = OsStr::new("abc"); // OsStrlet a4 = OsString::from(a2); // OsString,兼容windows等遗留问题,可以存储不在UTF8范围内的字符println!("{:?} {:?}",a3, a4);let _a5 = CString::new("abc_cstring").unwrap(); // 与CStr配合使用//let a6 = unsafe{CStr::from_ptr(ptr)}; // 从一个C语言的 char* 字符串 中创建一个CStr // char是UTF-8编码,所以对于不同字符占用字节不同// 在使用[u8]对中文处理一定要小心,不能完整截取中文字符时,可能程序挂掉let b1 = '1'; // char => 1let b2 = '🍇'; // char, emoji Unicode => 4let b3 = '咋'; // char, UTF-8 => 3println!("{} {} {}", b1.len_utf8(), b2.len_utf8(), b3.len_utf8());// 字符数量计算let c1 = "温度32。Andy喜欢吃🍉~";println!("default UTF8 len: {}, chars(unicode) len: {}", c1.len(), c1.chars().count()); // 29, 14// 所以,统计多语言字符,使用char进行,统计字节数使用默认的utf8编码的.
}

相关文章:

  • flask_Restful数据解析参数设置
  • [ Linux ] git工具的基本使用(仓库的构建,提交)
  • flowable-ui后台显式非中文
  • 百度文心一言(ERNIE bot)API接入Android应用
  • DNS、DNS劫持与HTTPDNS:原理、应用与安全分析
  • 外包干了一个月,忘记Git怎么使用了...
  • Rust 标准库:std::env::args() 函数简介
  • linux系统装载nginx的笔记
  • IDEA一键备份MySQL数据库(mysqldump版)
  • 树状打印二叉树的类Java、Go、PHP
  • 二叉树的遍历及线索二叉树试题解析
  • 让手机平板成为AI开发利器:AidLux
  • liunx之nginx安装
  • 区块链与智能合约
  • 详细安装步骤:vue.js 三种方式安装(vue-cli)
  • [deviceone开发]-do_Webview的基本示例
  • avalon2.2的VM生成过程
  • Making An Indicator With Pure CSS
  • orm2 中文文档 3.1 模型属性
  • SegmentFault 2015 Top Rank
  • WordPress 获取当前文章下的所有附件/获取指定ID文章的附件(图片、文件、视频)...
  • 创建一个Struts2项目maven 方式
  • 关键词挖掘技术哪家强(一)基于node.js技术开发一个关键字查询工具
  • 理解 C# 泛型接口中的协变与逆变(抗变)
  • 让你的分享飞起来——极光推出社会化分享组件
  • 微信开源mars源码分析1—上层samples分析
  • UI设计初学者应该如何入门?
  • ​​​​​​​​​​​​​​Γ函数
  • ​用户画像从0到100的构建思路
  • (007)XHTML文档之标题——h1~h6
  • (2015)JS ES6 必知的十个 特性
  • (LNMP) How To Install Linux, nginx, MySQL, PHP
  • (vue)页面文件上传获取:action地址
  • (附源码)springboot家庭装修管理系统 毕业设计 613205
  • (力扣)1314.矩阵区域和
  • (五)Python 垃圾回收机制
  • (一)Thymeleaf用法——Thymeleaf简介
  • (转)Android学习系列(31)--App自动化之使用Ant编译项目多渠道打包
  • .cfg\.dat\.mak(持续补充)
  • .NET Core WebAPI中使用Log4net 日志级别分类并记录到数据库
  • .net framwork4.6操作MySQL报错Character set ‘utf8mb3‘ is not supported 解决方法
  • .net mvc部分视图
  • .NET 的静态构造函数是否线程安全?答案是肯定的!
  • .NET 反射的使用
  • .Net接口调试与案例
  • .NET项目中存在多个web.config文件时的加载顺序
  • .NET运行机制
  • .py文件应该怎样打开?
  • @Valid和@NotNull字段校验使用
  • [ vulhub漏洞复现篇 ] Hadoop-yarn-RPC 未授权访问漏洞复现
  • [20190401]关于semtimedop函数调用.txt
  • [AIGC] Java 和 Kotlin 的区别
  • [Android]创建TabBar
  • [BZOJ4566][HAOI2016]找相同字符(SAM)
  • [hdu 1247]Hat’s Words [Trie 图]