You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C语言协议开发:如何将字符串长度编码至字符串头部

C语言中构造带长度前缀的数据包缓冲区

要实现把字符串长度编码到头部并控制分隔空格,直接通过sprintf()的格式字符串就能精准控制,以下是具体实现方案:

基础实现(带指定空格分隔)

如果要生成类似| 2 | my |的格式,直接在sprintf()的格式串中写入固定的空格和分隔符即可,示例代码:

#include <stdio.h>
#include <string.h>

int main() {
    const char *target_str = "my";
    int str_len = strlen(target_str);
    // 注意:缓冲区大小需预留足够空间,示例中"| 2 | my |"含终止符共11字节,若用10字节缓冲区会溢出,建议调整大小
    char buf[11]; 
    // 格式串中的空格直接定义了长度与字符串的分隔样式
    sprintf(buf, "| %d | %s |", str_len, target_str);
    printf("结果:%s\n", buf); // 输出 | 2 | my |
    return 0;
}

格式串"| %d | %s |"里的空格是固定写入的,直接控制了长度字段和字符串前后的空格间距。

更可靠的协议设计建议

如果要避免服务器解析时查找分隔符的麻烦,建议用固定宽度的长度字段(比如占3位,不足补0),这样服务器可以直接读取固定位数的字符转换为长度,示例:

sprintf(buf, "%03d %s", str_len, target_str);
// 当str_len=2时,buf内容为"002 my"

这种方式无需依赖空格分隔,协议解析更高效且不易出错。

注意事项

  • 必须提前计算缓冲区所需的总长度:数字的最大可能位数 + 固定分隔字符(空格、|等)的长度 + 字符串长度 + 1(字符串终止符'\0'),避免缓冲区溢出。
  • 如果字符串包含特殊字符(比如空格),用空格作为分隔符会导致解析错误,此时建议用非打印字符(比如'\0')作为分隔,或者直接用二进制方式存储长度(比如把int长度转为4字节大端序放在头部,再拼接字符串,这种方式更适合二进制协议)。

内容的提问来源于stack exchange,提问作者Hiiiii

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.03 17:35:30