Что не так в этом коде?Eventhe printf не печатается - PullRequest
0 голосов
/ 27 января 2011

Что не так в этом коде, даже если 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 ]

2 голосов
/ 27 января 2011

Скорее всего, ваш printf буферизуется, и ваше программирование, вероятно, дает сбой (вы не сказали, что произошло), что приводит к удалению буфера.В * nix вывод обычно буферизуется строкой, и printf начнет работать, если вы закончите строку, например так:

printf("decoding\n");

или вы можете очистить буфер явно (как вы, вероятно,на некоторых платформах)

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

Более того, вам трудно помочь, если мы не получим больше информации ... Это сбой?Печатается ли что-то вроде «Ошибка сегментации» или подобное?

HTH

1 голос
/ 27 января 2011

Чтобы увидеть, как далеко продвигаются ваши программы, вам нужно добавить перевод строки в свои printf операторы:

printf("decoding\n");

вместо:

printf("decoding");

В противном случае вывод просто буферизуется и никогда не записывается на консоль.

0 голосов
/ 27 января 2011

Ваши функции printf (), вероятно, не отображаются, потому что ваша программа аварийно завершает работу до сброса буфера.

Почему происходит сбой?Трудно сказать, может быть, число, считанное в nbBytes, больше 200, поэтому при следующем чтении будет переполнено пространство, выделенное для cbits?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...