1

我无法使用 C 上可用的任何文件处理函数(包括putw()fprintf()fwrite().

#include <stdio.h>
#include <conio.h>

void main()
{
  int i;
  int arr[]={10, 11, 12, 13, 14, 15};
  FILE *fp;
  if (fp = fopen("test", "w")) {
        for(i=0; i<6; i++) {
            putw(arr[i], fp);
        }
  }
  fclose(fp);
  fp = fopen("test", "r");
  while ((i=getw(fp))!= EOF) {
        printf("%d, ",i);
  }
  fclose(fp);
  getch();
}

给出一个输出

10, 11, 12, 3584, 3840,

和一个修改过的数组

int arr[]={13, 11, 12, 13, 14, 15};

给出一个输出

2816, 3072, 0, 14, 15, 

您可以注意到在遇到值 13后输出与预期不同。谁能帮我解决这个问题?

4

2 回答 2

5

看起来像 CR/LF 行结束处理。使用“b”模式修饰符以二进制模式打开文件,即:

  if (fp = fopen("test", "wb")) {
  fp = fopen("test", "rb");
于 2012-11-01T16:52:14.147 回答
0

它肯定闻起来像 CR/LF 处理。这样做的原因是 13 是 CR 的 ASCII ......我会将其作为二进制文件处理,让您负责行尾问题!

于 2012-11-01T17:01:25.673 回答