Netbeans和C,奇怪的bug

时间:2010-11-23 16:51:42

标签: c netbeans

我正在使用Netbeans 6.9.1(这是一个要求)在C中写一些东西,我偶然发现了一个奇怪的错误。当我尝试从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 个答案:

答案 0 :(得分:2)

如果fopen失败,您的代码可能会崩溃。当然,您要检查company_description_file != NULL是否为fscanf,但如果它为空,则继续将其传递给exit()(而不是{{1}}或提前返回等等。未定义的行为。

答案 1 :(得分:1)

至于它为什么不在Netbeans中运行:工作目录可能不正确 - 当你从Netbeans运行时,工作目录不一定与可执行文件所在的位置相同。

我没有安装Netbeans,但您可以在项目设置中设置工作目录(系统认为执行可执行文件的目录)。

我也同意aschelper的回答 - 如果你没有得到有效的FILE *,你不想继续运行该文件代码。

答案 2 :(得分:1)

不要责怪编译器/ IDE,错误在你的代码中:)

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

如果找不到文件,还有其他方法可以解决问题。现在你将一个NULL指针传递给导致崩溃的fscanf。您的程序很可能找不到该文件,因为NetBeans将工作目录设置在其他位置。确保设置正确的工作目录或将输入文件复制到正确的位置。