字符串不是 char 指针
C 里的 char * 很强,也很模糊。
它可能表示一段可变字节,可能表示 NUL 结尾字符串,可能表示 ASCII 文本,也可能只是某个 C API 要求的参数。调用者还要自己知道:这段内存归谁释放,里面有没有 \0,编码是什么,长度从哪里来。
C 里的 char * 很强,也很模糊。
它可能表示一段可变字节,可能表示 NUL 结尾字符串,可能表示 ASCII 文本,也可能只是某个 C API 要求的参数。调用者还要自己知道:这段内存归谁释放,里面有没有 \0,编码是什么,长度从哪里来。
C 里表示一段二进制数据,最常见的形态是指针加长度:
int parse_packet(const uint8_t *buf, size_t len);
这套写法很灵活,也很危险。buf 是否为空、len 是否可信、函数会不会修改数据、会不会保存这个指针、调用方什么时候释放内存,都不在类型里,只能靠约定、注释和经验。
C 开发者第一次写 Rust,真正陌生的往往不是 if、for 或函数调用。更早出现的变化是工程入口:C 程序通常从 main.c、gcc、Makefile 和 argc/argv 开始;Rust 程序通常先进入一个 Cargo 项目。