1

関数 find_depth; で cout ステートメントが配列 c_braces_array の内容を出力しない理由が非常に混乱しています。

私がやろうとしているのは、配列を渡してその値を出力することだけです。

#include <iostream>

int find_depth(char c_braces_array[], int no_of_braces)
{
    for(int i=0; i<no_of_braces; i++)
    {
        std::cout<<"val is:"<<c_braces_array[i]<<"F\n";
    }
    return 0;
}

int main()
{
    char braces[100] = {0};
    int ret_val = find_depth(braces, 100);
    std::cout<<ret_val;
    system ("pause");
    return 0;
}

O/P:

...
val is: F
val is: F
val is: F
val is: F
val is: F
0何かキーを押して続行します。. .

ここに画像の説明を入力

編集:メインにすべて0を含むように配列を初期化しました。だから私は0が印刷されることを期待していました。O (Oh! のように) がどこで文脈に入るのかわからない。誰かがそれについてもう少し説明できますか?

私はこのo / pを期待していました

値は:0 F

編集 - 2: みんなありがとう。バグを指摘してくれてありがとう。また、次の行が配列全体ではなく「a」でブレース [0] のみを初期化する理由もわかりません。forループを実行する代わりに、配列全体を初期化する正しい方法は何ですか。

今私のコードは以下のようになります。

main(){
        ...
    char a_char = 'a';
    char braces[100] = {a_char};
      }

find_depth(..)
{
     ...
    std::cout<<"val is:"<<c_braces_array_ptr[i]<<"X\n";
}

O/P
内部 main: a
val is:aX
val is: X
val is: X
val is: X
val is: X
val is: X
val is: X
val is: X

4

3 に答える 3

2

試す:

std::cout<<"val is:"<< (int)(c_braces_array[i]) <<"F\n";
于 2012-06-24T20:28:28.843 に答える
2

あなたの質問のほとんどは答えられたようですが、完全を期すために、復習しましょう。

  1. 期待する場所に何も印刷されない理由は、すべての0値を含むように配列を初期化したためです。A0は c-string の null ターミネータです。つまり、文字列の終わりを示します。これは非印刷文字でもあります。すべての c-string を印刷文字で終わらせたくありません。これは意味がありません。ASCII 文字 0 が必要な場合は、'0'which is decimalが必要48です。(参照: http://www.asciitable.com/ )
  2. 配列をデータで宣言して初期化すると、各要素が初期化リストの対応するデータで埋められます。例では; char myArray[10] = {'a', 'b', 'c'};値で配列を初期化しますmyArray[0] = 'a'; myArray[1] = 'b'; myArray[2] = 'c';が、他のすべての要素はどうですか? 1 つの要素が繰り返されることを想定していません。また、ガベージが不要であることも想定しています。代わりに、配列に0値を入力します。
  3. 次の質問は、「どうすれば別の値で埋めることができますか?」というようなものになると思います。すべての要素のすべての値を明示的に指定せずに、配列の初期化方法を変更する方法はありません。ただし、各値を設定できます。

    unsigned int i;
    char myArray[100]; // Don't waste time initializing any data yet.
    
    for(i = 0; i < 100; ++i)
    {
         myArray[i] = 'a'; // Set each element to 'a' - Now it's initialized!
    }
    

    別のオプションはmemset();、 の一部であるを使用することです<string.h>。これにより、各要素が特定の値に設定されます。あなたの場合は、おそらく必要なものです。これは次のように行われます。

    #include <string.h>
    
    char myArray[100]; // Declare, don't initialize.
    memset(myArray, 'a', 100); // Initialize by setting each value to 'a'!
    

これが役に立ったことを願っています!C ストリングをもう少しよく理解するために、C ストリングを練習して遊んでみると役立つ場合があります。と の間には違いがあることに注意してください。はゼロの値で'0'あり0、はゼロ文字の文字値です。(読む: )。したがって、memset で 0 を出力する場合は、次のようにする必要があります。0'0'48memset(myArray, '0', 100);

于 2012-06-25T00:56:35.807 に答える
0

変数値を出力しようとしています。その値は 0 であり、 ではありません'0'。0 は印刷可能な文字ではないため、何も印刷できません。

于 2012-06-24T20:27:59.217 に答える