簡體   English   中英

該代碼有什么問題? 即使printf沒有被打印

[英]What is wrong in this code? Eventhe printf is not getting printed

即使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;
}

可能是您的printf被緩沖了,您的程序可能崩潰了(您沒有說發生了什么),導致該緩沖被丟棄了。 在* nix中,輸出通常是行緩沖的,如果結束該行,則printf將開始工作,如下所示:

printf("decoding\n");

或者您可以顯式刷新緩沖區(在某些平台上可能需要刷新)

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

除此之外,如果我們沒有獲得更多信息,很難為您提供幫助。.它崩潰了嗎? 它是否打印出“分段錯誤”之類的內容?

高溫超導

為了查看您的程序能走多遠,您需要將換行符添加到您的printf語句中:

printf("decoding\n");

代替:

printf("decoding");

否則,輸出只會被緩沖,並且永遠不會寫入控制台。

您的printf()可能沒有出現,因為您的程序在刷新緩沖區之前就崩潰了。

為什么會崩潰? 很難說,也許讀入nbBytes的數量大於200,所以您的下一次讀取溢出了為cbits分配的空間?

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM