gpt4 book ai didi

c++ - 调试断言失败缓冲区!= NULL

转载 作者:行者123 更新时间:2023-11-30 21:03:22 24 4
gpt4 key购买 nike

你好,我有一个大学项目,用任何可能的语言读取 Wav 文件,所以我选择了 C/C++ 我认为我一切都正确,但我一直在做一件事c 项目我总是收到此消息“Buffer!= 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");
}

最佳答案

正如您的错误所示-

Error 2 error C2664: 'strcmp' : cannot convert parameter 1 from 'BYTE [5]' to 'const char *'

您无法将 BYTE [5] 数据类型传递给字符串比较函数。它对原型(prototype)无效。语法是-

int strcmp(const char *s1, const char *s2);

你的两个参数都必须是字符串!

但是您正在将 wav_id 传递给 strcmp。我认为这不是一个字符串-

strcmp(wav_id,"RIFF") // problem 
strcmp(wav_id,"WAVE") // problem
<小时/>

否则您可以使用 memcmp 来比较内存位置。原型(prototype)是-

int memcmp(const void *s1, const void *s2, size_t n);

两个参数都是void *,因此您可以向此函数传递任何类型的指针!

尝试以下更改-

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))
... }

关于c++ - 调试断言失败缓冲区!= NULL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25300634/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com