【问题标题】:Simple C exit loop...why is the code not terminating here?简单的 C 退出循环......为什么代码没有在这里终止?
【发布时间】:2021-06-10 05:55:36
【问题描述】:

我正在尝试在 C 中进行基本的文件 I/O 错误处理,但由于某种原因,我的代码在运行 exit() 时并没有立即退出,而是继续执行其余代码和段错误。

我已经注释了它应该退出的行。 为什么我的程序没有退出这里?

给定命令:(使用这个)

./test

正确的命令:

./test <Input file>

代码应该检查额外的关键字参数,如果没有,则会引发错误。

int main(int argc, char* argv[]){
    FILE *fp;
    int cur;

    printf("%i", argc);
    if (argc < 1){
        perror("Syntax: ./test <Input File>");
        exit(1);
    }
    // validate in_args are READABLE
    for (int i=1; i<argc; i++){
        fp = fopen(argv[i],"r");
        if (fp == NULL){
            fprintf(stderr, "%s: cannot open %s", argv[0], argv[i]);
            exit(1);
        }
    }
// ================================ ^should exit here 
    // OPEN FILE - EXCEPTIONS
    fp = fopen(argv[1], "r");
    while ((cur=fgetc(fp))!=EOF){
        printf("%c",cur);
    }
    if (fp){
        fclose(fp);
    }




}

【问题讨论】:

    标签: segmentation-fault clang c99


    【解决方案1】:

    这个测试

    if (argc < 1) {
    

    永远不会是真的——总会有至少一个参数(程序名称)。你可能想要

    if (argc != 2) {
    

    这里,要求程序使用两个参数运行,程序名称 (argc[0]) 和输入文件 (argc[1])

    【讨论】:

      【解决方案2】:

      没关系...忘记了从 argv[1...argc] 开始的输入参数

      【讨论】:

        【解决方案3】:

        我不太确定你的答案,但我有一个可行的解决方案

        而不是使用 exit(1), 使用休息 并且在循环放(exit(1))之后

        for (int i = 0; i

        现在看看你能做些什么来解决你的问题

        for (int i = 0; i

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2017-02-21
          • 1970-01-01
          • 2013-09-29
          • 1970-01-01
          • 2017-06-05
          • 2021-02-24
          • 2021-09-01
          相关资源
          最近更新 更多