私はファイルを読み、単語を数えたいと思う。コマンドラインでファイルが入力されない場合は、ファイル名を取得して読み取るif文をトリガーしてから、その単語を数えさせるために、コマンドラインを使用するように設定します。コマンドラインでファイル名を入力すると動作しますが、使用しなければフォールトが発生します。条件はargc
次に、一般的な場合にargc
は1に等しく、C標準argv[argc]
によればNULL
に等しい実際2以上である場合であることは事実である場合if文でsegフォルトが発生するのはなぜですか?
int main(int argc, char **argv)
{
char file[75];
if (argc < 2)
{
cout << "Please enter the filename: ";
cin >> file;
strcpy(argv[1], file);
}
string content;
ifstream inFile(argv[1]);
int count = 0;
while (inFile >> content)
count++;
inFile.close();
display(count, argv);
return 0;
}
に
file
を変更する場合は、より良いこれはUBであるcin.getline(file)
またはstd::getline(cin, file)
を使用するので、ファイル名は、それらを持つことができます: 'strcpyの(ARGV [1]、ファイル) ; ' – drescherjm'argc'が2より小さい場合、' argv'の有効なインデックスは何ですか? – NathanOliver
セグメンテーションフォールトが発生した後、デバッガを使用してコードに侵入しようとしましたか?それが何を伝えましたか?デバッガを使うことを学ぶことは非常に良い習慣です。あなたはあなたが将来あなた自身のためにこれを理解できたかを確かめるために、あなたがここで答えを得た後でさえ試してみるべきです。 –