即使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;
}
答案 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分配的空间吗?