[英]Bus error in simple C program
我有以下简单程序。 而且我正在命令行中运行“ program file.txt”,并且没有输出“ Bus error”。 我不知道我在做什么错。
#include<stdio.h>
int main(char *arg[])
{
FILE *file = fopen(arg[0], "r");
if (file == NULL) {
printf("Cannot open file.\n");
exit(1);
}
return 1;
}
C入口函数的原型是
int main(int argc, char *arg[]);
因此,对于您的原型,您实际上正在尝试取消引用int以传递给fopen
试试这个
#include<stdio.h>
int main(int argc, char *argv[])
{
FILE *file = fopen(argv[1], "r");
if (file == NULL) {
printf("Cannot open file.\n");
exit(1);
}
return 1;
}
您是否可以打印出arg [0]的值,假设main的类型是
int main(int argc, char* argv[])
argv [0]是进程的名称,argv [1]是第一个参数。
main()
的标准原型应如下所示:
int main(int argc,char * argv []);
您仅使用一个参数argv
声明了main()
。 但是系统正在将大量参数作为第一个参数传递。
当您指定单个参数(文件file.txt
)时, argc
设置为1。但是您的程序尝试将整数1用作char **
。 这给出了总线错误。
这是可以使用的程序的编辑版本:
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char *argv[])
{
FILE *file;
if (argc != 2)
{
fprintf(stderr, "Usage: myprogram <filename>\n");
exit(1);
}
file = fopen(argv[1], "r");
if (file == NULL) {
fprintf(stderr, "Cannot open file.\n");
exit(2);
}
exit(0); // status 0 to signal no error
}
变化:
我添加了#include <stdlib.h>
以获得exit()
的声明。
我检查参数的数量,如果不正确,则打印“用法:”字符串。
我将错误消息打印到stderr
而不是标准输出。
我将return 1
更改为exit(0)
,以明确表明程序已成功退出。
argv[0]
包含应用程序名称。 尝试改用argv[1]
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.