0

私はそれらのポインターの問題を再び抱えていると思います。指定したファイルに char 配列を保存する単純な関数を作成しました。これはすべて私のコードです:

#include <stdio.h>
#include <string.h>

void Output(const char*, const char*, const char*);
void OutPutSomething();

// main.cpp --------------------------------------------------
int main(int argc, char** argv) {
    char Message[256];
    snprintf(Message, 256, "This message will be saved\n");
    Output("Output.txt", Message, "w");
    return 0;
}

void OutPutSomething() {
    Output("Output.txt", "This text will not be saved (???)\n", "w");
}

void Output(const char *FileName, const char *Text, const char *Mode) {
    FILE *OutputFIle;
    OutputFIle = fopen(FileName, Mode);
    if (OutputFIle != NULL) {
        printf(Text, "\n");
        fputs(Text, OutputFIle);
        fclose(OutputFIle);
    } else {
        printf("Output function failed!");
    }
}

したがって、私の問題は次のとおりです。メイン関数から呼び出された場合、Output()関数は正しく動作します-テキストはファイルに保存されます。しかし、Output()関数を呼び出すとOutPutSomething()、テキストがファイルに正しく保存されません (「\B0」テキストのみが保存されます)。コンソールにテキストがprintf()表示されますが、テキストは保存されません。

原因は何ですか?ありがとう!

詳細: Code::Blocks (GCC コンパイラ) を使用しており、アプリケーションはコンソール アプリケーションです。ライブラリはリンクされておらず、他のヘッダーは追加されていません。このような単純なことがうまくいかないのを見るのはイライラします。

4

1 に答える 1

3

あなたのコードは私のシステムでうまく機能します。ただし、ヘッダーファイルに関数の実装を入れてはいけないという他の人たちにも同意します。

于 2012-09-06T20:15:13.277 に答える