0

今回はコードを正しくフォーマットしたことを願っています。最初に、コードはそのまま機能すると言いましょう。私が問題に遭遇するのは、いくつかの部分を理解し、他の部分を変更することです。

多数のコメントを削除し、いくつかの質問に限定します。1. FILE は Obj-C のキーワードですか? その機能は何ですか?なんで全部大文字?2. "r" は何をしますか? 3. テキスト ファイルには、\n で終わる空のスペースを含む文字列が既に含まれています。c-string の代わりに NSString にしないのはなぜですか? 4. ファイルの起動パラメーターを (実行可能ファイルを使用し、引数とプラスをクリックして、パラメーターを入力して) /tmp 以外 (/Desktop など) に変更しようとすると、エラーが発生するのはなぜですか? 結局のところ、/tmp は不安定で脆弱な場所です。これは、/Desktop で発生したエラーです。シグナル 10 (SIGBUS) により、デバッガーが終了しました。

コードは次のとおりです。

#import <Foundation/Foundation.h>

int main (int argc, const char * argv[]) { NSAutoreleasePool * プール = [[NSAutoreleasePool alloc] init];

if (argc == 1)
{
    NSLog(@"You need to provide a file name");
    return 1;
}

FILE *wordFile = fopen(argv[1], "r");

char word[100]; 
while (fgets (word, 100, wordFile))
{
    word[strlen(word) - 1] = '\0';
    NSLog(@"%s is %d characs long", word, strlen(word));
}

fclose (wordFile);
[pool drain];
return 0;

}

4

1 に答える 1

0

これのほとんどは標準的な C のもので、たまたま Objective-C としてコンパイルされていますが、FILE と fopen() と fgets() は昔ながらの C です。

FILE はおそらく、構造定義を参照するためにどこかで #define されています。これはキーワードではなく、stdio.h で定義されている (私が思うに) 通常のシンボルです。

「r」は「読める」という意味です。引数が持つことができるすべての値について fopen を検索しますが、「r」、「r+」、「b」、「a」、「w」などはオプションの一部です。

/Desktop は有効なディレクトリですか? コンソール ウィンドウでそのディレクトリに移動し、「pwd」と入力して正しいパスを取得したことを確認します。fgets を使用する前に、wordFile が null の場合 (つまり、ファイルが見つからないか、何らかの理由でファイルを開くことができなかった場合) にエラー メッセージを表示したい場合があります。

于 2010-06-04T23:58:15.437 に答える