为什么我的 if 语句会出现 seg 错误?



我想读取一个文件并数单词。我希望对其进行设置,以便我可以使用命令行,或者,如果未在命令行上输入文件,则触发一个if语句,该语句将获取文件名并读取它,然后计算单词数。如果我在命令行中键入文件名,它可以工作,但是如果我不使用它,它会出错。这是代码:

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;
}

您不应该修改argv的数据,尤其是越界的数据。你的逻辑应该相反:

char file[75];
if (argc < 2)
{
cout << "Please enter the filename: ";
cin >> file;
} else
strcpy( file, argv[1] );
string content;
ifstream inFile(file);

但是您最好也std::string用于可变file

此外cin >>输入的单词(不包括空格符号),但文件名可以包含它们,因此如果将file更改为std::string,则最好使用cin.getline( file )std::getline( cin, file )

如果条件为真,即如果argc确实小于2,那么在一般情况下argc等于1,根据C标准argv[argc]等于NULL

因此,在这种情况下,程序具有未定义的行为。

在任何情况下,将字符串复制到 argv[n] 都是一个坏主意,其中 n 是某个索引,因为源字符串可能大于目标字符串。

您可以使用反向方法,即将argv[1]复制到file

相关内容

  • 没有找到相关文章

最新更新