用标准库写入文件

时间:2012-04-21 22:21:16

标签: c fopen fwrite fread printf

我从未在将数据写入文件方面遇到太多麻烦!我正在从MinGW运行GCC,因为我习惯在Linux中使用GCC。我通常使用Linux系统调用open(),write()和read(),但我现在正在编写一个Windows程序,而我在Windows中使用read()/ write()时遇到了麻烦,所以我只是在使用标准库。无论如何,我遇到的问题是我不知道如何写入文件!我已经定义了“FILE *”变量,使用fopen(),“r + b”,“wb”和“w + b”,但我仍然无法用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,如果这有助于任何人。我真的不明白,不过因为从我读到的内容来看,这只是表明存在错误,但仅此而已。

1 个答案:

答案 0 :(得分:5)

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

这是您的代码中第二次将fopen的结果分配给infile。您可能想要outfile