Netbeans и C, своеобразная ошибка - PullRequest
0 голосов
/ 23 ноября 2010

Я пишу что-то на C, используя Netbeans 6.9.1 (это необходимо), и наткнулся на странную ошибку. Когда я пытаюсь запустить этот код из Netbeans:

#include <stdio.h>
#include <stdlib.h>
#include "company_description.h"


company_description read_company_description() {
    char file_name[FILE_NAME_BUFFER_SIZE];
    FILE *company_description_file;
    company_description cd;


    printf("Please enter the name of the file containing the "
            "company's description: \n");
    scanf("%50s", file_name);


    company_description_file = fopen(file_name, "r");
    if(company_description_file != NULL) {
        printf("file is not null\n");
    }
    fscanf(company_description_file, "%s%s%s%s%s%s", cd.company_name,
        cd.name_file_deliveries_info, cd.name_file_industrial_park,
        cd.name_file_places, cd.name_file_roads, cd.name_file_vans_info);
    return cd;
}

Я получаю этот вывод:

Please enter the name of the file containing the company's description: 
name_file.txt
Segmentation fault
Press [Enter] to close the terminal ...

Хорошо, я говорю себе, с моей точки зрения, в этом коде нет ничего плохого, и я перехожу к ~ / path / to / NetbeansProject / dist / Debug / GNU-Linux-x86 и попробуйте запустить оттуда исполняемый файл, и он работает. Я забыл упомянуть, что файл, который нужно прочитать, находится в той же папке, где находится исполняемый файл. Теперь может быть ошибка на моей стороне, но я не вижу ее, поэтому любые мысли об этом будут полезны. Спасибо!

Ответы [ 3 ]

2 голосов
/ 23 ноября 2010

Ваш код, вероятно, потерпит крах, если fopen не удастся.Конечно, у вас есть проверка на company_description_file != NULL, но затем, если он нулевой, вы идете вперед и все равно передаете его fscanf (вместо exit(), возвращаясь рано или что-то в этом роде).Неопределенное поведение.

1 голос
/ 23 ноября 2010

Не вините компилятор / IDE, ошибка в вашем коде:)

company_description_file = fopen(file_name, "r");
if(company_description_file != NULL) {
    printf("file is not null\n");
}
fscanf(...

Существует еще одна пропавшая, которая справится с ситуацией, когда файл не найден. Прямо сейчас вы передаете нулевой указатель в fscanf, что вызывает сбой. Ваша программа не может найти файл, скорее всего, потому что NetBeans устанавливает рабочий каталог в другом месте. Убедитесь, что вы установили правильный рабочий каталог или скопировали входной файл в нужное место.

1 голос
/ 23 ноября 2010

Относительно того, почему он не запускается в Netbeans: рабочий каталог, вероятно, неверен - при запуске из Netbeans рабочий каталог не обязательно совпадает с тем, где находится исполняемый файл.

У меня не установлен Netbeans, но вы можете установить рабочий каталог (в каком каталоге, по мнению системы, выполнялся исполняемый файл) в настройках вашего проекта.

Я также согласен с ответом aschelper - если вы не получите верный FILE * обратно, вы не захотите продолжать выполнять этот код файла.

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