0

「はははは」という単語の最初の文字を指す string1 という名前の char ポインターがあるとします。string1 が指す文字列と同じ文字列を含む char[] を作成したいと考えています。

これが機能しないのはなぜですか?

char string2[] = string1;
4

4 に答える 4

3

「どうしてうまくいかないの?」

それは C 言語が定義された方法ではないからです。

[ ANSI Cstrdup()ではないことに注意]を使用してコピーを作成できます。strdup()

参照:

于 2013-08-24T01:13:29.307 に答える
0

あなたがこのように書くもの:

char str[] =  "hello";

...実際には次のようになります。

char str[] =  {'h', 'e', 'l', 'l', 'o'};

ここでは、初期化子と呼ばれるものを暗黙的に呼び出しています。
上記のシナリオでは、イニシャライザが文字配列の作成を担当します。
初期化子は、舞台裏でこれを行います。

char str[5];

str[0] = 'h';
str[1] = 'e';
str[2] = 'l';
str[3] = 'l';
str[4] = 'o';

C は非常に低レベルな言語です。あなたの声明:

char str[] = another_str;

C では意味がありません。C では、配列全体を別の配列に割り当てることはできません。手動で、または strcpy() 関数を使用して、文字ごとにコピーする必要があります。another_str上記のステートメントでは、初期化子は配列変数の長さを知りません。を入れる代わりに文字列をハードコーディングすると、うまくいきanother_strます。

他のいくつかの言語では、そのようなことができるかもしれません... しかし、マニュアル車が自動的にギアを切り替えることは期待できません。あなたはそれを担当しています。

于 2015-10-25T07:18:32.137 に答える
0

1) ポインター string2 == ポインター string1

どちらかの値を変更すると、もう一方が変更されます

ポスターポイダより

char string1[] = "hahahahaha";
char* string2 = string1;

2) コピーを作成する

char string1[] = "hahahahaha";
char string2[11]; /* allocate sufficient memory plus null character */
strcpy(string2, string1);

どちらかの値が変化しても、もう一方は変化しません

于 2013-08-24T01:22:58.483 に答える
-1

Cでは、文字列を保持するためにメモリを予約する必要があります。
これは、定数文字列を定義してから char[] に割り当てると、自動的に行われます。

一方、 を記述するとき、string2 = string1実際
に行っているのは、charオブジェクトへのポインタのメモリ アドレスを割り当てることです。が(pointer-to-char) string2として宣言されている場合、代入は有効です。char*

char* string2 = "Hello.";

変数string2は、char "Hello." の定数配列の最初の文字のアドレスを保持するようになりました。

string2が achar*string1が aの場合、 string2 = string1 と書いても問題ありませんchar[]

ただし、 achar[]はメモリ内に一定のアドレスを持つと想定されています。変更不可です。
したがって、次のような文を書くことは許可されていません。

 char string2[];
 string2 = (something...);

ただし、string2 は文字の配列であるため、string2 の個々の文字を変更できます。

 string2[0] = 'x'; /* That's ok! */
于 2013-08-24T01:25:53.230 に答える