2012-04-21 57 views
1

我從來沒有將數據寫入文件這麼麻煩!我從MinGW運行GCC,因爲我習慣在Linux中使用GCC。我通常使用Linux系統調用open(),write()和read(),但現在我正在編寫Windows程序,並且在Windows中使用read()/ write()時遇到問題,所以我只是使用標準庫。無論如何,我遇到的問題是我不知道如何寫入文件!我用「r + b」,「wb」和「w + b」定義了「FILE *」變量,用fopen(),但我仍然無法用fwrite()或fprintf()寫入輸出文件。我不知道我什麼都做錯了!下面是我的源:使用標準庫寫入文件

#include <limits.h> 
#include <math.h> 
#include <stdio.h> 
#include <stdlib.h> 
#include <strings.h> 

#define DEBUG 1 

/*** Global functions ***/ 
double highfreq(double deg); 

/*** Global variables ***/ 
double sin_now; 

unsigned int *ptr; 
unsigned char *key, *infilename, *outfilename; 
FILE *infile, *outfile, *keyfile; 

const char *pipe_name="[pipe]"; 

int main(int argc, char *argv[]) { 
    unsigned int x, y, z; 

    if(argc!=3) { 
     fprintf(stderr, "Syntax error: %s <infile.txt> <outfile.wav>", argv[0]); 
     return 1; 
    } 
    if(argv[1][0]=='-') { 
     infile=stdin; 
     infilename=(unsigned char *)pipe_name; 
    } 
    else { 
     infilename=argv[1]; 
     if((infile=fopen(infilename, "rb"))==NULL) { 
      fprintf(stderr, "Could not open input file for modulation.\n", infile); 
      return 2; 
     } 
    } 
    if(argv[2][0]=='-') { 
     outfile=stdout; 
     outfilename=(unsigned char *)pipe_name; 
    } 
    else { 
     outfilename=argv[2]; 
     if((infile=fopen(outfilename, "wb"))==NULL) { 
      fprintf(stderr, "Could not open/create output file for modulation.\n", outfile); 
      return 3; 
     } 
    } 
    if(DEBUG) printf("Input file:\t%s\nOutput file:\t%s\n", infilename, outfilename); 

    fprintf(outfile, "Why won't this work!?\n"); 

    fclose(infile); 
    fclose(outfile); 
    return 0; 
} 

double highfreq(double deg) { 
    double conv, rad; 

    conv=M_PI/180; 
    rad=deg*conv; 
    return sin(rad); 
} 

我終於要做一個WAV文件作爲輸出,因而有「highfreq()」功能,但現在我甚至無法得到它寫入一個文件!如果有幫助的話,fprintf()返回錯誤值-1。我不是很明白,但是因爲從我讀到的內容來看,這只是表示出現了錯誤,但沒有更多。

回答

5
outfilename=argv[2]; 
    if((infile=fopen(outfilename, "wb"))==NULL) { 

這是第二次在代碼分配的fopeninfile結果。那裏你可能想要outfile

+0

啊!最有可能的罪魁禍首!我(顯然)複製粘貼這兩個部分,並且改變(幾乎:P)所有的變量!當我到達我的電腦時,我會嘗試它! – Sean 2012-04-22 14:21:06

+0

我對(重大)延誤表示歉意;我碰巧正在經歷我的問題,看到我從未回答過這個問題!是的,徹底的閱讀證明是必要的。謝謝,這是答案。 – Sean 2015-02-15 18:05:04