简单C程序中的总线错误
我有以下简单的程序。我从命令行运行“programfile.txt”,得到“Bus error”,没有输出。我不知道我做错了什么简单C程序中的总线错误,c,bus-error,C,Bus Error,我有以下简单的程序。我从命令行运行“programfile.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
#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;
}
#包括
int main(字符*参数[])
{
FILE*FILE=fopen(arg[0],“r”);
if(file==NULL){
printf(“无法打开文件。\n”);
出口(1);
}
返回1;
}
假设main的类型为
int main(int argc, char* argv[])
argv[0]是进程的名称,argv[1]是第一个参数 如果main的类型是
int main(int argc, char* argv[])
argv[0]是进程的名称,argv[1]是第一个参数 c entry函数的原型是
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;
}
#包括
int main(int argc,char*argv[])
{
FILE*FILE=fopen(argv[1],“r”);
if(file==NULL){
printf(“无法打开文件。\n”);
出口(1);
}
返回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;
}
#包括
int main(int argc,char*argv[])
{
FILE*FILE=fopen(argv[1],“r”);
if(file==NULL){
printf(“无法打开文件。\n”);
出口(1);
}
返回1;
}
main()的标准原型应如下所示:
intmain(intargc,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
}
#包括
#包括
int main(int argc,char*argv[])
{
文件*文件;
如果(argc!=2)
{
fprintf(stderr,“用法:myprogram\n”);
出口(1);
}
file=fopen(argv[1],“r”);
if(file==NULL){
fprintf(stderr,“无法打开文件。\n”);
出口(2);
}
退出(0);//状态0表示无错误
}
变化:
- 我添加了
#include
,以获得exit()的声明
- 我检查参数的数量,如果不正确,则打印Usage:string
- 我将错误消息打印到
stderr
而不是标准输出
- 我将
return 1
更改为exit(0)
,以明确程序正在成功退出
main()的标准原型应如下所示:
intmain(intargc,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
}
#包括
#包括
int main(int argc,char*argv[])
{
文件*文件;
如果(argc!=2)
{
fprintf(stderr,“用法:myprogram\n”);
出口(1);
}
file=fopen(argv[1],“r”);
if(file==NULL){
fprintf(stderr,“无法打开文件。\n”);
出口(2);
}
退出(0);//状态0表示无错误
}
变化:
- 我添加了
#include
,以获得exit()的声明
- 我检查参数的数量,如果不正确,则打印Usage:string
- 我将错误消息打印到
stderr
而不是标准输出
- 我将
return 1
更改为exit(0)
,以明确程序正在成功退出
argv[0]
包含应用程序名称。尝试改用argv[1]
。argv[0]
包含应用程序名称。请尝试改用argv[1]
。否,我在打印arg[0]时也遇到问题。因此,请将main类型更改为int main(int argc,char*argv[])好的,谢谢!工作得很好!更改为您的建议并使用了argv[1]后,效果良好。不,我在打印arg[0]时也遇到了问题。因此,请将主类型更改为int main(int argc,char*argv[])好的,谢谢!工作得很好!更改为您的建议并使用了argv[1]并且有效。在本例中,arg
保留传递的参数数。在本例中,arg
保留传递的参数数。