0

作品:

char *s="sfdggh";
char *u="xcvbn";

s=u;
cout << s;

動作しません:

char *s="sfdggh";
char *u="xcvbn";

*s=*u;
cout << s;

なぜ?(検索しましたが、理解できませんでした)

//***************** EDIT **********************************

私は何かを得ました。私が正しいかどうか私の理解を確認してください。

char *s;
char *v;

char a,b;

s=&a;
v=&b;

s=v; //Address exchange

似ている:

char *s="sfdggh";
char *u="xcvbn";

s=u; // Address Exchange too!/ Not Value Exchanging
4

4 に答える 4

4

s=u;これは完全sに有効です。

*s=*u;sは、文字列リテラルポイントの最初の文字を の最初の文字で上書きしようとしますがu、これは不正です。

文字列リテラルの変更は未定義の動作です。

char *s="sfdggh";
char *u="xcvbn";

どちらも文字列リテラルです。

于 2012-10-26T08:38:38.513 に答える
1

const 文字列リテラルは変更できません。

于 2012-10-26T08:39:48.103 に答える
0

*s=*u と記述している場合、S が指すアドレスの最初の位置に格納されている char の値を、u が指すアドレスの最初の位置に格納されている char に変更しています。

char *s="sfdggh";
char *u="xcvbn";

これら 2 つは文字列リテラルであり、定数として機能します。g++ -Wall を使用して、コンパイラによって与えられた警告を確認できます。

于 2012-10-26T10:29:18.720 に答える
0

sおよびupointer、再割り当て可能なタイプです。

*s*uは、メモリのコード セグメントcharに格納される型です。 コード セグメントに保存されているものはすべて、変更することはできません (そうしないと、たとえば、プログラム自体が変更される可能性があります)。

ソース コードなどで文字列リテラルを記述する"xcvbn"と、メモリのコード セグメントに の配列として格納されchar、残りのプログラム コードと一緒に格納されます。

于 2012-10-26T08:43:46.010 に答える