CS50作业speller.c运行报‘Could not open %s’错误求助
CS50 Speller 「Could not open %s.」错误排查方案
核心原因定位
该错误来自speller.c中固定逻辑:只要load函数返回false,就会触发此提示。所以问题本质是你的dictionary.c中load函数未正确完成字典加载,或字典文件无法被正常读取。
逐一排查步骤
- 检查命令行参数
运行程序时必须传入字典文件的正确路径,比如字典文件在当前目录下,命令应为:./speller dictionary.txt test.txt,不能遗漏字典文件参数。 - 核查
load函数的文件打开逻辑
必须使用传入的dictionary参数打开文件,不能硬编码路径。正确的文件打开判断逻辑如下:
若你硬编码了路径(比如写死bool load(const char *dictionary) { FILE *dict_file = fopen(dictionary, "r"); // 必须判断文件是否打开成功 if (dict_file == NULL) { return false; } // 后续读取单词、构建哈希表等逻辑... fclose(dict_file); return true; }fopen("~/cs50/dict.txt", "r")),当运行环境路径变化时就会打开失败。 - 检查文件权限
在终端执行ls -l dictionary.txt查看字典文件权限,若没有读权限,执行chmod +r dictionary.txt添加可读权限。 - 排查
load函数的返回值逻辑
若文件打开成功,但后续处理(比如内存分配、单词读取)出错,需确保此时也返回false,避免因中间步骤失败却返回true导致的逻辑混乱。
参考speller.c触发错误的固定代码
if (!load(dictionary))
{
printf("Could not open %s.\n", dictionary);
return 1;
}
内容的提问来源于stack exchange,提问作者ksm
相关产品推荐
相关产品推荐

