【发布时间】:2014-10-07 16:00:41
【问题描述】:
你好,我有一个大学项目可以用任何语言读取 Wav 文件,所以我选择了 C/C++,我想我做的一切都是对的,但我一直在做的一件事 c项目我总是得到这个消息“缓冲区!= NULL”
完整代码:
int main (){
//char id[10];
FILE *wav;
wav=fopen("sound.wav","rb");
if(wav){
BYTE wav_id[5], *sound_buffer;
DWORD size;
short format_tag, channels, block_align, bits_per_sample;
DWORD format_length, sample_rate, avg_bytes_sec,datasize,i;
fread(&wav_id,sizeof(BYTE),4,wav);
wav_id[sizeof(BYTE)+3]=0;
if (!memcmp(&wav_id,"RIFF",4)) {
fread(&size,sizeof(DWORD),1,wav);
fread(&wav_id,sizeof(BYTE),4,wav);
if (!memcmp(&wav_id,"WAVE",4)) { //this is probably a wave file since it contained "WAVE"
fread(&wav_id,sizeof(BYTE),4,wav); //read in 4 bytes "fmt ";
fread(&format_length,sizeof(DWORD),1,wav);
fread(&format_tag, sizeof(short), 1, wav);
fread(&channels, sizeof(short),1,wav);
fread(&sample_rate, sizeof(DWORD), 1, wav);
fread(&avg_bytes_sec, sizeof(short), 1, wav);
fread(&block_align, sizeof(short), 1, wav);
fread(&bits_per_sample, sizeof(short), 1, wav);
fread(&wav_id, sizeof(BYTE), 4, wav); //read in 'data'
fread(&datasize, sizeof(DWORD), 1, wav); //how many bytes of sound data we
sound_buffer=(BYTE *)malloc(sizeof(BYTE) * datasize);
fread(sound_buffer, sizeof(BYTE), datasize, wav); // i trace the problem to this line the whole above code seems to run smooth
}
cout << "\n The file is Riff but it's not a wav file"<<endl;
}
else {
cout <<"\nNOT a Wav File\n"<<endl;}
}
else {
cout <<"\nFile wasn't opened\n"<<endl;
}
system("pause");
}
【问题讨论】:
-
你应该再看一遍错误信息,很清楚。它还应该包含错误所在的行号,因此很容易找到。如果程序甚至没有构建,你怎么能得到一个断言错误呢?此外,断言错误和构建错误是两个不同且独立的问题,因此您可能应该有两个问题,而不是将它们混为一谈。
-
您将不得不提供更多细节。哪些行会产生编译错误? C 和 C++ 不是同一种语言,将项目从一种语言切换到另一种语言并非易事。
-
它说的是第 147 行,而我的代码只有 66 行,我知道问题出在哪里,但我不知道如何解决它
-
此外,您的代码中有undefined behavior,因为
wav_id不是正确的以零结尾的字符串。这意味着strcmp函数将超出wav_id数组的末尾。我非常希望wav_id是一个数组,或者在读取时将指针传递给wav_id时,您会有更多(可能是两种情况)未定义的行为。 -
c project i always get this msg "Buffer != NULL"你在哪个代码中遇到了这个问题!
标签: c++ c visual-studio-2013 wav