[英]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.