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

C语言如何读取RSA私钥文本文件并拆分提取各组成字段?

问题根因
  • 缓冲区无字符串终止符:C语言中字符串以\0作为结束标记,fread接口仅负责按字节读取内容到缓冲区,不会自动追加终止符。printf("%s")输出时会持续读取内存直到遇到\0,如果缓冲区末尾无终止符,就会出现截断、乱码问题。
  • 缓冲区大小不足:你定义的private_size数组大小为2070,而完整的私钥文本大小刚好接近甚至超过该值,导致末尾内容未被读入缓冲区,出现截断。
  • 缺少异常处理:代码未判断文件打开结果,如果文件不存在或无读取权限,后续fclose操作会触发未定义行为。
  • 无效逻辑冗余:代码中while(size_key>0){size_key=size_key-1;}无任何实际作用,可直接删除。
修复方案

调整后的代码如下:

#include<stdio.h>
#include<string.h>
// 放大缓冲区,预留终止符空间
#define KEY_BUFFER_SIZE 4096
unsigned char private_size[KEY_BUFFER_SIZE];

int main() {
    FILE * fp2 = fopen("privateKey.txt", "r");
    // 增加文件打开失败判断
    if (fp2 == NULL) {
        printf("privateKey.txt打开失败\n");
        return -1;
    }
    // 读取时预留1字节位置放终止符,获取实际读取长度
    size_t read_bytes = fread(private_size, 1, sizeof(private_size) - 1, fp2);
    // 手动追加字符串终止符
    private_size[read_bytes] = '\0';
    fclose(fp2);

    printf("%s\n", private_size);
    return 0;
}

修改说明

  1. 缓冲区大小调整为4096,完全覆盖1024位RSA私钥的文本体积
  2. 读取时预留1字节空间,读取完成后根据实际读取长度手动追加\0终止符,保证字符串输出正确
  3. 新增文件打开失败判断逻辑,避免非法内存操作
  4. 删除无用的循环逻辑

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 22:06:03