请帮助,我已经评论了我认为给我一个错误的所有代码,但我仍然得到它。这是我的代码:
int main(int argc, char **argv) {
// argc is the number of command line arguments, in our case there are two
// argv is an array of pointers, a[0] is the program name, a[1] will be sourcewav
// and a[2] should be destwav
FILE * source_file;
FILE * destination_file = fopen(argv[2], "w") ; // create destwav file
if (argc != 3) {
printf("Usage: requires two parameters: sourcewav and destwav");
exit(1);
}
//source_file = fopen(argv[1], "r+");
if (!source_file) { // pointer is null, file can't be opened
printf("Usage: %s sourcewav file cannot be opened\n", argv[0]);
exit(1);
}
printf("1");
remvocals(source_file, destination_file); // remove vocals
int closed_properly = fclose(source_file); // has source_file successfully closed?
if (closed_properly != 0) {
printf("Usage: %s sourcewav was not closed properly\n", argv[0]);
exit(1);
}
fclose(destination_file);
return 0;
}
非常感谢你!我一直在尝试调试它超过3个小时。
答案 0 :(得分:2)
在没有初始化的情况下检查sourcefile
。另外,什么是remvocals呢?
答案 1 :(得分:1)
移动
if (argc != 3) {
printf("Usage: requires two parameters: sourcewav and destwav");
exit(1);
}
在声明你的FILE指针之前。此外,取消注释初始化source_file
的行。我认为您需要argv[1]
而不是argv[0]
作为放置在第二个和第三个printf
主体中的if
的第二个参数。
答案 2 :(得分:1)
您没有提供足够的信息。
在您的代码中,显而易见的问题是:
1)永远不会检查destination_file以查看fopen()是否成功。如果destination_file为NULL,则对其执行的任何操作(fprintf(),fclose())都将给出未定义的行为。 fopen()需要在检查argc之后,而不是之前。
2)使用“source_file = fopen(argv [1],”r +“)”语句注释,source_file是未初始化的变量。访问它的值 - 更不用说将它作为文件参数传递给I / O函数 - 将给出未定义的行为。
3)你有一个名为remvocals()的函数(可能)正在将数据从source_file复制到destination_file,但是你没有提供任何关于它的信息。即使解决了前两个问题,也有许多功能可能会导致未定义的行为。
鉴于上述所有情况,您的代码很可能甚至无法代表您的实际问题。你最好提供一个小而完整的样本 - 在构建时 - 实际上证明了你的问题。否则,试图帮助你的人就会采取猜测。
答案 3 :(得分:0)
//source_file = fopen(argv[1], "r+");
if (!source_file) { // pointer is null, file can't be opened
printf("Usage: %s sourcewav file cannot be opened\n", argv[0]);
exit(1);
}
在我看来,你忘记取消注释这一行:
//source_file = fopen(argv[1], "r+");
你也应该搬家:
if (argc != 3) {
printf("Usage: requires two parameters: sourcewav and destwav");
exit(1);
}
在你开始这一行的行之前:
FILE * destination_file = fopen(argv[2], "w") ; // create destwav file