繁体   English   中英

简单C程序中的总线错误

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM