问题分析

1. 文本模式 vs 二进制模式

你使用 fopen("D://fa1.txt", "w") 打开了文件,这是文本模式。在Windows系统中:

  • 文本模式下,每个换行符 \n (0x0A) 会被自动转换为 \r\n (0x0D 0x0A)

  • 如果你的 feture1 数组中包含 \n 字符,每个都会增加1字节

2. 计算过程

假设你的2560字节数据中包含13个 \n 字符:

  • 原始大小:2560字节

  • 每个 \n 被替换为 \r\n,增加1字节

  • 最终大小:2560 + 13 = 2573字节

解决方案

1. 使用二进制模式写入(推荐)

           FILE *file = fopen("D://fa1.txt", "wb"); // 注意 "wb" 而不是 "w"                
           if (file == NULL) {
           perror("Error creating file");
           return;
           }

           // 写入数据
           for (int i = 0; i < sizeof(feture1); i++) {
           fputc(feture1[i], file);
           }

           // 获取文件大小
           fseek(file, 0, SEEK_END);
           long file_size = ftell(file);
           rewind(file);
           fclose(file);

           printf("文件大小: %ld 字节\n", file_size); 

2. 使用 fwrite 函数(更高效)     

          FILE *file = fopen("D://fa1.txt", "wb");
          if (file == NULL) {
          perror("Error creating file");
          return;
          }

          // 一次性写入整个数组
          size_t written = fwrite(feture1, 1, sizeof(feture1), file);
          printf("成功写入 %zu 字节\n", written);

          fseek(file, 0, SEEK_END);
          long file_size = ftell(file);
          fclose(file);

          printf("文件大小: %ld 字节\n", file_size);

关键点总结

1. **文本模式 ("w")**:会进行换行符转换,可能导致文件大小变化
2. **二进制模式 ("wb")**:保持数据原样,不会进行任何转换
3. **对于二进制数据**(如图像特征、序列化数据等),总是使用二进制模式

使用 `"wb"` 模式后,文件大小应该正好是写入的字节数。