简单C程序中的总线错误

时间:2012-06-05 02:51:31

标签: c bus-error

我有以下简单的程序。我从命令行运行“program file.txt”并获得“总线错误”而没有输出。我不知道我在这里做错了什么。

#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;
}

4 个答案:

答案 0 :(得分:3)

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;
}

答案 1 :(得分:2)

你可以打印出arg [0]的值,假设main的类型是

int main(int argc, char* argv[])

并且argv [0]是进程的名称,argv [1]是第一个参数。

答案 2 :(得分:1)

main()的标准原型应如下所示:

int main(int argc,char * argv []);

您只用一个参数main()声明了argv。但是系统将一个参数计数作为第一个参数传递。

当您指定单个参数(文件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()的声明。

  • 我检查参数的数量并打印一个Usage:字符串,如果它不对。

  • 我将错误消息打印到stderr而不是标准输出。

  • 我将return 1更改为exit(0),以明确该程序已成功退出。

答案 3 :(得分:0)

argv[0]包含应用程序名称。请尝试使用argv[1]