Попытка открыть несуществующий файл вызывает ошибку seg? - PullRequest
0 голосов
/ 22 февраля 2019

У меня есть программа, которая должна имитировать определенные команды оболочки.Одна из этих команд, которую я должен создать, это cat, но у меня проблема с ней.Когда я запускаю его для файла, который существует, он работает, но когда я пытаюсь запустить его для файла, который не существует, я получаю ошибку сегментации.Хотя я думал, что мне сказали, что fopen () можно использовать для проверки существования файла, не вызывая ошибки сегментации.Код для части кода в коде cat приведен ниже (есть некоторые переменные, которые были объявлены ранее, например, token, но я включил некоторые комментарии, чтобы объяснить, что это такое, однако я почти уверен, что проблема не имеет ничего общего сэти переменные.)

if(strncmp(token, "cat", 3) == 0){
            FILE* in;
            char tLine[500];
            char f;
            //Copy the entire line of user input from earlier into a temporary char array
            strcpy(tLine, inputLine);
            /*Advance the char array that contains the original line of input 
            split by spaces to the first argument*/
            token = strtok(NULL, " ");
            //For storing the number of arguments
            int count = 0;
            //Determine number of arguments
            while(token != NULL){
                count++;
                token = strtok(NULL, " ");
            }
            strcpy(tLine, inputLine);
            token = strtok(tLine, " ");
            token = strtok(NULL, " ");
            if(count < 1){
                printf("%s", "Please enter at least one argument");
            }
            else if (count > 1){
                printf("%s", "Please only enter one argument");
            }
            //If there is only one argument, attempt to open the file and read its contents.
            else{
                in = fopen(token, "r");
                if(in){
                    f = fgetc(in);
                    while(f != EOF){
                        printf("%c", f);
                        f = fgetc(in);
                    }
                }
                else{
                    printf("%s", "Could not open file.");
                }
                fclose(in);
            }
        }

...