2017-06-04 9 views
1

私はObjective-Cのルーキーです。文字の配列の要素数を取得したいと思います。Objective-c - 配列のcount要素を取得する

@autoreleasepool { 

    char parola[30]; 
    int c; 

    NSLog(@"Write word:"); 
    scanf("%c",&parola[30]); 

    c = sizeof(parola)/sizeof(parola[0]); 
    NSLog(@"The word has %i letters",c); 

} 
return 0; 

問題は、配列の宣言で指定された長さであり、要素の数ではないということです。

+0

あなたはObjective-Cを扱っているので、あなたはNSStringを使ってより良い運があると思います。 – vitormm

答えて

2

あなたはいくつかのエラーがあります。

  1. 「単語」、つまり文字列を入力します。次に、1文字のみをスキャンする%cを使用せず、1文字列をスキャンする%sを使用してください(ユーザーがスペースまたは29文字以上を入力することもあります)。

  2. アレイを超えて保存します。それはそれは(「存在しない」インデックス30、で)値0 .. 29しかし、あなたの&parola[30]ポイント配列を超えでインデックスを作成できることを意味し

    char parola[30]; 

として配列が宣言されています。それはあなたが望むものではありません。これを行う:

scanf("%s", parola); 

そして、29文字を超えて入力しないことを願ってください。文字列の

は、だから、これはなっ

c = strlen(parola); 

を使用して見つけることができます:

@autoreleasepool { 
    char parola[30]; 
    unsigned long c; 

    NSLog(@"Write word:"); 
    scanf("%s", parola); 

    c = strlen(parola); 
    NSLog(@"The word has %ld letters", c); 

} 
return 0; 

の代わりのNSLog、あなたもprintfを使用することができます。

printf("Write word: "); 

および

は常に

2017-06-04 12:37:25.758802+0200 SOTest[4718:2690388] 

のように、これらの追加に関する情報を示し、それは、IMO、平野醜いあるとして、クリーンになります

printf("The word has %ld letters\n", c); 

。ログには適していますが、クリーンな画面出力には適していません。

Write word: Tesla 
The word has 5 letters 
Program ended with exit code: 0 
+0

@sulthan:他の(削除された)回答に対するあなたのコメント: "LLVMでは、@autoreleasepoolをまったく使用する必要はありません。すべてのスレッドはデフォルトで1つを取得します。は正しいですが、メニューからObjective-Cで新しいコンソールプログラムを起動すると、 '@autoreleasepool {}'の部分がXcodeによって生成されます。また、 'print()'の代わりに '' Hello、world! ''を出力するのにNSLog()を使います。 –

+0

それは動作します!本当にありがとう :) – Edo

関連する問題