你真的没有得到任何诊断吗?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;
is 不是函数调用,这也应该在任何理智的编译器中产生诊断消息。应该是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;}
^~~~~~