Я получаю странные символы в моем выходном файле вместо соответствующих букв - PullRequest
0 голосов
/ 24 июня 2019

Я пытаюсь распечатать порядок следования BST в выходной файл. Однако иногда я получаю странные символы вместо стандартного.

Я попытался выделить дополнительное место для char arr [], но это ничего не меняет.

РЕДАКТИРОВАТЬ: я изменил код и попытался разделить его на две части. Первый - метод назначает каждый узел массиву узлов в порядке уровней и возвращает этот массив. И два, другой массив, который записывает содержимое возвращаемых значений в файл. На этот раз я получаю 2 ошибки.

ошибка: несовместимые типы при назначении типу "struct bstNode *" из типа "bstNode" ошибка: несовместимые типы при назначении типу "struct bstNode *" из типа "bstNode"

void traverseTree(bstNode *root){
        FILE *file;
        file = fopen("newFile", "w");
        char *arr;
        arr = (char*)malloc(10000 * sizeof(char));
        if(root == NULL)
                return;

        traverseTree(root->left);
        fgets(arr, 100, stdin);
        fprintf(file, arr);
        traverseTree(root->right);

}

Новый код ниже

bstNode* traverseTree(bstNode *root, int i){

        bstNode *arr[100];
        if(root == NULL)
                return;

        traverseTree(root->left, i);

        arr[i] = root;
        ++i;
        traverseTree(root->right, i);

 return *arr;
}

void writeToFile(bstNode *root, char *outputFileName){
        FILE *file;
        file = fopen("newFile", "w");
        bstNode *arr = traverseTree(root, 0);
        int i = 0;
        root = arr[i];
        while(root!= NULL){
        fprintf(file, root->data);
        ++i;
        root = arr[i];
        }

}

1 Ответ

0 голосов
/ 24 июня 2019

Помимо следующих

  • Повторное открытие одного и того же файла
  • Не проверять возвращаемые значения из fopen и malloc
  • Не требует приведенияfrom malloc
  • Не проверяется возвращаемое значение из fgets

Следующая строка

fprintf(file, arr);

имеет проблему: arr имеет символ% вэто (как для форматирования - см. страницу руководства)

Используйте вместо этого

fprintf(file, "%s", arr);

.

РЕДАКТИРОВАТЬ

После вашего редактирования возникла другая проблема:

return *arr;

Это возвращает данные, находящиеся в стеке - они выйдут за рамки.

Также все еще есть та же проблема с fprintf - пожалуйста, прочитайте страницу руководства для этого

...