1

ファイルへのデータの書き込みにこれほど苦労したことはありません。Linux で GCC を使用することに慣れているため、MinGW から GCC を実行しています。私は通常、Linux システム コールの open()、write()、および read() を使用しますが、現在 Windows プログラムを作成しており、Windows で read()/write() を使用するのに問題があったため、単に使用しています。標準ライブラリ。とにかく、私が抱えている問題は、ファイルに書き込む方法がわからないことです! 「FILE *」変数を定義し、「r+b」、「wb」、および「w+b」で 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 のエラー値で戻ります。私が読んだことから、これは単にエラーがあったことを示しているだけなので、よくわかりませんが、それ以上のことはありません。

4

1 に答える 1

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

fopenコード内でtoの結果を代入するのは 2 回目ですinfile。あなたはおそらくoutfileそこにいたかったでしょう。

于 2012-04-21T22:23:48.430 に答える