4

初心者の質問で申し訳ありませんが、これを機能させることができないようです。助けていただければ幸いです。

const int sz = 24;


int main()
{
char a [sz];

for (int i = 0; i < 5; i++)
    cin >> a[i];

ifstream inFile;

inFile.open(a);

cout << inFile.good() << endl;


return 0;
}

これは私がやろうとしていることのより小さなバージョンであり、 inFile ストリームを .open() で開き、ファイル名に対して char 配列である a を渡そうとしています。正しいディレクトリに a.txt というファイルがある (確認済み) ので、a.txt を入力して a 配列に読み込みますが、inFile.good() は依然として false を返します。また、配列が 5 文字よりも大きいことも知っていますが、これが影響することはないと思います。

さらに情報が必要な場合はお知らせください。

4

1 に答える 1

2

の署名openは次のとおりです。

void open ( const char * filename, ios_base:openmode mode = ios_base::in );

ご覧のとおり、最初の引数は定数文字列 (ヌル終了文字配列) です。あなたの場合、最後にヌル文字はありません。これを行うには、入力するファイル名の最大サイズよりも 1 大きいサイズの配列が必要です。

1 つの だけを使用してすべての文字を読み取ってみませんcinか? として:

cin >> a;
ifstream inFile;
inFile.open(a);

または、Stringクラスを使用してユーザー入力を取得してから、に渡すことができる同等のものc_str()を取得するために使用することをお勧めします。const char*open

于 2012-04-26T05:59:24.683 に答える