c++ 输入“I am a student.”输出“student. a am I”能编译通过,运行有问题 ,哪里有错?

intmain(){char*p="Iamastudent.";voidturnaround(char*p);turnaround(p);while(*p!='\0')c... int main()
{

char *p = "I am a student.";
void turnaround(char * p);
turnaround(p);
while (*p != '\0')
cout << *p++;
return 0;
}

void swap(char &c1, char &c2);
void turnaroundword(char * pbeg,const char & c);
void turnaround(char * p)
{
char *pbeg = p;
char *pend = p;
turnaroundword(p,'\0');
while (1)
{
if (*pend == ' ')
{
turnaroundword(pbeg, ' ');
pbeg = pend +1;

}
if (*pend == '\0')
{
turnaroundword(pbeg, '\0');
break;
}
pend++;
}
}

void turnaroundword(char * pbeg,const char &stop)
{
if (pbeg == NULL)
return;
char * pend = pbeg;
while (*pend != stop && *pend != '\0')
++pend;
--pend;
while (pbeg < pend)
{
swap(*pbeg, *pend);
++pbeg;
--pend;
}
}

void swap(char &c1, char &c2)
{
char c = c1;
c1 = c2;
c2 = c;
}
展开
 我来答
百度网友fb85f7b
2015-10-07 · TA获得超过241个赞
知道小有建树答主
回答量:106
采纳率:100%
帮助的人:75.8万
展开全部
同学,你对字符串、字符串常量、字符数组、c++的内存模型了解不到位。

你在main()中第一行:char *p = "I am a student.";

声明了一个指针p,指向一个字符串常量"I am a student."。所谓常量,就是不能改变的量,其存在内存中的常量区,而你下面的代码中试图改变这个常量的值(试图进行字符交换)。所以运行时异常。

把main()中第一行:char *p = "I am a student.";
改为:char[ ] p = "I am a student."; 试试。
这样p就是一个字符数组形式的字符串了,其存储在内存的栈空间,是可以改变的,当然不能超出其长度。
更多追问追答
追问
char p[] = "I am a student.";
while (*p != '\0')
cout << *(p++); \\ 这里显示需要左值 不能对p++吗?
追答
可以把数组名当成指针来用的。所以可以p++
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式