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 指向的地址的第一个位置中的值,该值由存储在 u 指向的地址的第一个位置中的字符存储。

现在

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

这两个是字符串文字并充当常量。您可以使用 g++ -Wall 检查编译器给出的警告

于 2012-10-26T10:29:18.720 回答
0

s并且upointer-types,可以重新分配。

*s并且*uchar存储在内存代码段中的类型。
存储在代码段中的任何内容都是非法修改(例如,程序可能会自行更改)。

当您在源代码中编写字符串文字时,它与程序的其余代码一起"xcvbn"作为 的数组存储在内存的代码段中。char

于 2012-10-26T08:43:46.010 回答