C Чтение файла из командной строки - PullRequest
0 голосов
/ 26 сентября 2018

Не знаю, в чем проблема, но у меня есть содержимое в файле "m.fs182", и когда я запускаю его через командную строку вместе с исполняемым файлом "./P0 m.fs182", я получаю сообщение 'abort'это должно быть отображено, если указатель файла возвращает NULL.Который не должен иметь место, любой ответ относительно того, почему это делает это?

#include "display.h"
#include "traversals.h"
#include "tree.h"
#include "node.h"

using namespace std;

int main(int argc, char **argv) {
    char buffer[100];
    FILE *fp;
    char* fb = (char *)malloc(strlen("out") + 7);

    if(argc > 2) {
            string sb = "out";
            strcpy(fb, sb.c_str());

            fp = tmpfile();

            if(fp == NULL) {
                    abort();
            }

            do
            {
                    fputs(buffer,fp);

            }while(fgets(buffer, sizeof(buffer), stdin));

            rewind(fp);
    }

    else if(argc == 2) {
            char *filename = (char *)malloc(strlen(argv[1] + 7));
            strcpy(filename, argv[1]);
            strcpy(fb, argv[1]);
            strcat(filename, ".fs182");

            if((fp = fopen(filename, "r")) == NULL) {
                    abort();
            }

    }else {
            printf("%s", "Invalid numbr of arguments\n");
            return 1;
    }

            Node* root = buildTree(fp);

            char* traversePre = (char *)malloc(strlen(fb)+17);
            char* traverseIn = (char *)malloc(strlen(fb)+17);
            char* traversePost = (char *)malloc(strlen(fb)+17);

            strcpy(traversePre, fb);
            strcat(traversePre, ".preorder");

            strcpy(traverseIn, fb);
            strcat(traverseIn, ".inorder");

            strcpy(traversePost, fb);
            strcat(traversePost, ".postorder");

            printf("Preorder: ");
            traversePreorder(root, 0, traversePre);

            printf("\nInorder: ");
            traverseInorder(root, 0, traverseIn);

            printf("\nPostorder: ");
            traversePostorder(root, 0, traversePost); 

    return 0;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...