这段代码有什么问题?如果printf没有打印出来

时间:2011-01-27 12:39:50

标签: c

即使printf无效,此代码有什么问题。但它正在成功编译

#include <speex/speex.h>
 #include <stdio.h>
 #include <stdlib.h>
 /*The frame size in hardcoded for this sample code but it doesn't have to be*/
 #define FRAME_SIZE 160



int main()
 {
   printf("decoding");
   char *outFile;
   FILE *fout, *fs;
   short out[FRAME_SIZE];
   float output[FRAME_SIZE];
   char cbits[200];
   int nbBytes;
   void *state;
   SpeexBits bits;
   int i, tmp;
   fout = fopen("test_40khz_mono_Q5.spx", "rb");
   if(fout == NULL){
   printf("******Error*******");
   }
   else{
   printf("*******Okay********");
   }

    fs = fopen("pcmfile","wb");
   if(fs == NULL){
   printf("****Error pcm creation****");
   }
   else{
   printf("*****pcm File created*****");
   }
state = speex_decoder_init(&speex_nb_mode);

   tmp=1;
   speex_decoder_ctl(state, SPEEX_SET_ENH, &tmp);
    speex_bits_init(&bits);

   while (!(feof(fout)))
   {
    fread(&nbBytes, sizeof(int), 1, fout);
    fread(cbits, 1, nbBytes, fout); //Problem area
     speex_bits_read_from(&bits, cbits, nbBytes);
     speex_decode(state, &bits, output);

     for (i=0;i<FRAME_SIZE;i++)
      out[i]=output[i];

       fwrite(out, sizeof(short), FRAME_SIZE, fs);
   }

    speex_decoder_destroy(state);
    speex_bits_destroy(&bits);
   fclose(fout);
   fclose(fs);
  return 0;
}

3 个答案:

答案 0 :(得分:2)

有可能你的printf正在被缓冲,你的编程可能会崩溃(你没有说明发生了什么),导致缓冲区被丢弃。在* nix中,输出通常是行缓冲的,如果结束行,printf将开始工作,如下所示:

printf("decoding\n");

或者您可以显式刷新缓冲区(因为您可能需要在某些平台上)

printf("decoding\n");
fflush(stdout);

更重要的是,如果我们没有获得更多信息,很难帮助你。它会崩溃吗?它是否打印出类似“分段错误”或类似内容的东西?

HTH

答案 1 :(得分:1)

为了了解您的程序获得了多少,您需要在 printf 语句中添加换行符:

printf("decoding\n");

而不是:

printf("decoding");

否则,输出只是缓冲而从不写入控制台。

答案 2 :(得分:0)

你的printf()可能没有出现,因为你的程序在刷新缓冲区之前就崩溃了。

为什么会崩溃?很难说,读入nbBytes的数字可能大于200,所以你的下一次读取会溢出为cbits分配的空间吗?