2 dongguxidu1 dongguxidu1 于 2016.02.17 16:36 提问

C++中字符串中交换字符的问题

// char* s = "12";//为什么使用这样的方式会报错?
char s[] = "12";
char t;
t = s[0];
s[0] = s[1];
s[1] = t;

7个回答

caozhy
caozhy   Ds   Rxr 2016.02.17 16:43
已采纳

char* s = "12";
这里s指向的是常量区的字符串12,不能修改。
必须用
char [] temp = "12";
char *s = &temp[0];

caozhy
caozhy 回复崖高人远: 堆栈上
接近 2 年之前 回复
dongguxidu1
dongguxidu1 s在常量区,那temp在什么区里面?
接近 2 年之前 回复
Mr_dsw
Mr_dsw   Ds   Rxr 2016.02.17 20:36

不会报错的,char *s1 = "hello"; char *s1 的s1,而指针是指向一块内存区域,它指向的内存区域的大小可以随时改变,而且当指针指向常量字符串时,它的内容是不可以被修改的,否则在运行时会报错。

dongguxidu1
dongguxidu1 谢谢了~
接近 2 年之前 回复
t18267174450
t18267174450   2016.02.17 16:40

有错误截图吗,我的不报错

dongguxidu1
dongguxidu1 回复崖高人远: 是这样声明没有问题,但是运行时报错。
接近 2 年之前 回复
dongguxidu1
dongguxidu1 是用的char s[] = "12";来声明的吗?我用char* s = "12";声明报错
接近 2 年之前 回复
2wuliao
2wuliao   2016.02.17 16:40

char* s={"12"};

dongguxidu1
dongguxidu1 这样声明,运行时还是报错啊
接近 2 年之前 回复
q3733353520
q3733353520   2016.02.17 16:43

那样s就指向常量区,
s[0] = s[1];
s[1] = t;//那么这2句都有问题

dongguxidu1
dongguxidu1 谢谢了~
接近 2 年之前 回复
mudbee
mudbee   2016.02.18 00:09

“12” 是 const char* 。可以用 char * p= const_cast("12");

dongguxidu1
dongguxidu1 确实是可以从const char*转成char*,但是我的操作还是报错。
接近 2 年之前 回复
henuyx
henuyx   2016.02.18 16:57

const char* s= "12";
也会有错吗?

dongguxidu1
dongguxidu1 也会出错
接近 2 年之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!