難道你真的得到任何診斷在所有?來自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無效的,但你在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;}
^~~~~~
我使用vs2017,只有一個錯誤消息:讀取位置0x ....時發生訪問衝突,不像gcc @ _ @那樣提示! –
@馬慧超*編譯期間,不在運行程序期間。 –
@馬慧超你絕對有必要找到這些編譯器診斷的輸出位置並仔細閱讀它們,否則你將永遠不會編寫一個可用的C程序! :D –