2010-11-23 11 views
0

Netbeans 6.9.1(その要件)を使用してCで何かを書いていて、私は特異なバグに遭遇しました。私は、NetBeansから、このコードを実行しようとすると:NetbeansとC、特有のバグ

#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 ... 

私はこのコードと間違って何もありません争うの私のポイントから、自分自身に言うと、私は行く[OK]を 〜/ path/to/NetbeansProject/dist/Debug/GNU-Linux-x86にあり、そこから実行可能ファイルを実行しようとすると動作します。私は、実行ファイルがどこにあるのと同じフォルダにあるのかを忘れていました。今、私の側に間違いがあるかもしれませんが、私はそれを見ませんので、これに関するどんな考えも参考になります。ありがとう!

+1

あなたの作業ディレクトリが間違っている可能性があります - Netbeansから実行すると、作業ディレクトリは実行ファイルの存在場所と同じである必要はありません。 – birryree

+0

@Birryree、私はあなたが正しいと思う、答えとして投稿する? –

答えて

1

Netbeansで動作しない理由:作業ディレクトリはおそらく正しくありません.Netbeansから実行すると、作業ディレクトリは実行ファイルが存在する場所と必ずしも同じではありません。

Netbeansはインストールされていませんが、プロジェクトの設定で作業ディレクトリ(システムが実行ファイルが実行されたと考えるディレクトリ)を設定できます。

また、私はaschelperの回答に同意します。有効なFILE *が戻らなければ、そのファイルコードを実行し続けたくありません。

+0

ありがとう@birryree、それは解決策であり、前のコメントで指摘したように、私はファイル処理で他の行方不明を認識しています:)。 – gmunk

2

fopenが失敗するとコードがクラッシュする可能性があります。確かに、あなたはcompany_description_file != NULLかどうかを確認していますが、それがヌルであれば、先に進んでfscanfに渡します(exit()早送りか早送りではなく)。未定義の動作。

+0

ええ、あなたは正しいですが、私はそれが問題であるとは思わないが、コマンドラインからコードを呼び出すと@birryreeが正しいと思うので、現在の作業を変更する方法を考えなければならないこの血まみれのもののディレクトリ。とにかく男:)ありがとう。 – gmunk

1

バグがあなたのコードであり、コンパイラ/ IDEを責めないでください:)

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

他には、ファイルが見つからないときには、状況に対処します行方不明があります。今すぐクラッシュを引き起こすfscanfにNULLポインタを渡します。あなたのプログラムはNetBeansが作業ディレクトリをどこか別の場所に設定するため、おそらくそのファイルを見つけることができません。正しい作業ディレクトリを設定するか、入力ファイルを適切な場所にコピーしてください。

+0

Netbeansとコマンドラインの両方で提供するファイルが同じで、前者の場合は動作しないため、このように(速くて汚い)投稿しましたが、指摘していただきありがとうございます。後者ではそうです。とにかくもう一度感謝します。 – gmunk