0

char配列を定義しました:

char d[6];

次の点で間違っている場合は訂正してください。

現時点では、変数にメモリは割り当てられていませんd。今、私はそれを初期化するつもりです:

d="aaaaa";

この種の初期化の後、メモリを解放する必要はありません。自動的に行われます。

が初期化されたかどうかはどうすればわかりchar[]ますか?私は次のようなパターンを探しています

if (filled(d)){..}

また、char []に1種類の文字を入力するにはどうすればよいですか?

4

5 に答える 5

6

現時点では、変数 d にメモリが割り当てられていません。

正しくない。これ:

char d[6];

は初期化されていない 6 の配列でありchar、スタック上のメモリが割り当てられています。free()スタック変数は、初期化されているかどうかにかかわらず、明示的に dする必要はありません。スタック変数が使用するメモリは、スコープ外になると解放されます。または経由malloc()で取得したポインタのみを に渡す必要があります。realloc()calloc()free()

初期化するには:

char d[6] = "aaaaa"; /* 5 'a's and one null terminator. */

また:

char d[] = "aaaaa"; /* The size of the array is inferred. */

そして、すでにmathematician1975が指摘しているように、配列の割り当ては違法です。

char d[] = "aaaaa"; /* OK, initialisation. */
d = "aaaaa";        /* !OK, assignment. */

strcpy(), strncpy(), memcpy(),snprintf()などを使用してd、宣言後にコピーしたり、 のchar個々の要素に を代入したりできますd


char[] が初期化されたことを知る方法は? Filled(d){..} の場合はパターンが必要です

配列がヌルで終了している場合は、使用できますstrcmp()

if (0 == strcmp("aaaaaa", d))
{
    /* Filled with 'a's. */
}

またはmemcmp()、null で終了していない場合に使用します。

if (0 == memcmp("aaaaaa", d, 6))
{
    /* Filled with 'a's. */
}

char[] を 1 種類の文字で埋める方法は?

使用memset():

memset(d, 'a', sizeof(d)); /* WARNING: no null terminator. */

また:

char d[] = { 'a', 'a', 'a', 'a', 'a', 'a' }; /* Again, no null. */
于 2012-07-24T13:53:14.073 に答える
1

実行すると、コードはコンパイルされません (gcc 4.6.3)。

 char d[6];
 d = "aaaaa";

あなたがする必要があります

 char d[6] = "aaaaa" 

このように初期化します。これはスタック上に作成されたローカル変数であるため、メモリの問題に関して心配する必要があるのは、配列の境界を超えて書き込み/読み取りを行わないことだけです。

于 2012-07-24T13:54:33.273 に答える
0

char d[6]まず、 6 バイトのメモリが既に割り当てられていると宣言するたびに。

次に、malloc を実行しない限り、メモリを解放する必要はありません

3番目に、1種類の文字で初期化したい場合は、これを行います

char d[6] = "aaaaa"; 
于 2012-07-24T13:52:46.540 に答える
0
int d[6];

この宣言により、6 バイトがスタックに割り当てられます。自動的に解放されます。

于 2012-07-24T14:00:05.580 に答える
0
How to know was char[] initialized? I need pattern if filled(d){..}

文字配列を宣言するときにこれを行うだけです:

char d[6];
d[0] = 0;

次に、次のように確認できます。

if(strlen(d) == 0)
//d is not initialized
于 2012-07-24T14:00:17.030 に答える