fprintf不断添加我不想要的额外字符。我不能阻止这个吗?

时间:2010-10-04 12:43:18

标签: c file-io

我试图写出一个具有以下结构的图像文件:

P5      //magic number
512 512 //dimension of image
255     //max value per pixel
[Image Data.....]

标准说在最大值之后应该有一个空格或换行符,然后是图像数据。无论出于何种神秘原因,以下代码>始终<在标题的末尾添加2个字符(回车符和换行符)。这会使每个像素偏移1.

这就是我的所作所为:

   FILE *outfile; 
   outfile = fopen(filename,"w");
   int i =0, j =0;
   if(outfile==NULL || outfile == 0){
   printf("Output Failed\n");
   return;
   }
   //print header first 
   fprintf(outfile, "P5\r%d %d\r255",width,height);  
   //print out data now, all one line.
   for(i = 0; i<height; i++){
         for(j=0;j<width;j++){
              fprintf(outfile, "%c",pic[j][i]);
         }
   }

   fclose(outfile);
   printf("output to %s complete.\n", filename);          
   return;

我在这里缺少一个C微妙吗?如何让它不打印额外的字符?我做了一些实验,但我很茫然。谢谢你的时间。

2 个答案:

答案 0 :(得分:9)

您必须在Windows上,并且您的输出文件以文本模式打开。 将fopen(filename,"w")更改为fopen(filename,"wb")以二进制模式打开文件,问题就会消失。

答案 1 :(得分:2)

当我运行上面的代码时,我在标题后面没有看到2个字符。

我甚至没看到1个字符。数据从“255”结束标题后的下一个字节开始。

您的数据是否可能将pic [0] [0]作为回车符和pic [1] [0]作为换行符?