我的操作系统是窗口,我想将数据写入16位的pcm。这是我的代码:
typedef unsigned short uint16;
void write2PCM(char* file_path, int length, double* data) {
FILE* file=NULL;
file = fopen(file_path, "wb+");
for (int i = 0; i < length; i++) {
uint16 val=data[i]*10000;
uint16 fin_val = (val >> 8 & 0x00ff) | (val << 8 & 0xff00);
fwrite(fin_val,sizeof(fin_val),1,file);
}
fclose;}
当我调用它时,我在fwrite的位置得到了Error: &#34;读取位置0x时出现访问冲突....&#34;, 我可以看到文件已成功创建,所以我不知道为什么会出现此错误。
答案 0 :(得分:3)
你真的没有得到任何诊断 吗?来自C编译器的每个警告都是重要,它们通常是严重错误的迹象!此外,当您询问Stack Overflow时,请将编译器中的任何诊断信息逐字复制到问题中。
问题在于:
fwrite(fin_val, sizeof(fin_val), 1, file);
fwrite
的原型是
size_t fwrite(const void *ptr, size_t size, size_t nmemb, FILE *stream);
第一个参数必须是指向const void的指针,但是你传入uint16_t
。它应该是&fin_val
,以便fwrite
获取该变量的地址。
在相关的说明中,fclose;
不是函数调用,这也应该在任何理智的编译器中生成诊断消息。它应该是fclose(file);
。
以下是GCC的示例输出,没有警告:
% gcc -c pcm.c
pcm.c: In function ‘write2PCM’:
pcm.c:10:12: warning: passing argument 1 of ‘fwrite’ makes pointer from integer without a
cast [-Wint-conversion]
fwrite(fin_val,sizeof(fin_val),1,file);
^~~~~~~
此处启用所有警告:
% gcc -c pcm.c -Wall
pcm.c: In function ‘write2PCM’:
pcm.c:10:12: warning: passing argument 1 of ‘fwrite’ makes pointer from integer without a
cast [-Wint-conversion]
fwrite(fin_val,sizeof(fin_val),1,file);
^~~~~~~
In file included from pcm.c:1:0:
/usr/include/stdio.h:717:15: note: expected ‘const void * restrict’ but argument is of
type ‘uint16 {aka short unsigned int}’
extern size_t fwrite (const void *__restrict __ptr, size_t __size,
^~~~~~
pcm.c:13:1: warning: statement with no effect [-Wunused-value]
fclose;}
^~~~~~
答案 1 :(得分:0)
com.sun.jersey.spi.container.ContainerRequestFilter
需要指向您要写入的数据的指针。
这将以二进制模式将fwrite
写入文件:
fin_val
您的编译器应警告您提供了整数值而不是指针。您应该调高编译器的警告级别。如果使用fwrite(&fin_val,sizeof(fin_val),1,file);
,请将gcc
添加到编译器命令行。