【发布时间】:2026-02-23 14:15:02
【问题描述】:
我的代码编译得很好,但是当我运行它时出现总线错误:10
void backupf(char *namelist, char *dirname)
{
char *in_filename;
char *out_filename;
char line[MAXPATHLEN];
FILE *filenames = fopen(namelist, "r");
if(filenames == NULL)
{
fprintf(stderr, "Cannot Open File\n");
exit(EXIT_FAILURE);
}
while( fgets(line, sizeof line, filenames) != NULL )
{
sprintf(in_filename, "./%s\n", line);
sprintf(out_filename, "%s/%s\n", dirname, line);
}
backup(dirname, in_filename, out_filename);
fclose(filenames);
}
它应该采用带有文件名列表的文本文件参数,然后使用该信息使用我编写的备份函数将其备份到备份目录。
【问题讨论】:
-
欢迎来到 Stack Overflow。请尽快阅读About 页面。
backup()发生崩溃是不是因为你没有正确检查它使用的文件是否打开成功?您应该说明发生了什么,并且您应该能够使用足够多的调试器来获取堆栈跟踪,以便您可以判断它在哪个函数中崩溃(即使您不能用它做任何其他事情)。您真的不想在文件名中添加换行符;您可能需要删除fgets()在它读取的数据上留下的换行符。并且学习如何使用打印语句来找出发生了什么也很重要。 -
我知道它在 fgets() 函数中崩溃了,备份功能很好
-
奇怪...这往往意味着您在此代码调用的函数之一中存在缓冲区溢出。同样奇怪的是你没有在循环中调用
backup;您只尝试保存从文件中读取的姓氏。目前尚不清楚为什么您的backup()函数需要dirname参数。 -
我尝试在循环中调用备份并得到相同的结果,所以我想我会将文本行传递给一个单独的变量并尝试从循环外部调用它。备份函数打开备份文件,然后将 in_filename 复制到备份目录中。
-
“我知道它在 fgets() 函数中崩溃,备份函数很好” 这应该是可以重现的,没有代码示例中的
backup()调用(它是,因为你是写入指针中的不确定地址)。