新手求助 ,输出问题。。
int main (){
char *str = "Hello,world!\0";
char *last_char;
while ( *str != NULL )
printf ("%c", *str++ );
for ( last_char = str; last_char != NULL; last_char++ )
;
last_char--;
while ( str < last_char )
{
char temp;
temp = *str;
*str++ = *last_char;
*last_char = *str;
}
while ( *last_char != '\0' )
printf ( "%c", *last_char++ );
printf ( "What happened ?" );
system ("pause");
return 0;
}
这个只能输出最上面的一行Hallo,world 然后就不动了 这是什么情况啊 没搞明白哪个地方出差错了。。。 for语句里last_char != NULL这个判定语句是结束不了的。
另外,str指向的是字符串常量区,交换不了字符值的。 tsembrace 发表于 2013-10-22 08:56 static/image/common/back.gif
for语句里last_char != NULL这个判定语句是结束不了的。
另外,str指向的是字符串常量区,交换不了字符值的 ...
谢谢啦 根据你说的我再仔细看看吧 我只能输出前面的后面的,中间的代码我不懂了,要是你会的话,把代码贴出来,大家一起学习:
本帖最后由 ambition1982 于 2013-10-31 21:25 编辑
这个程序在不同的时期不同的环境中运行可能出现不同的情况,因为访问越界了。
char *str = "Hello,world!\0";
char *last_char;
while ( *str != NULL )
printf ("%c", *str++ );/*这里打印结束后,*str = 0了,指向常量字符串的‘\0‘结尾了*/
for ( last_char = str; last_char != NULL; last_char++ )/*其实这个循环进不去,因为last_char == NULL*/
;
last_char--;
while ( str < last_char ) /*上面写了last_char--,这个循环是永远进不去的。因为 str >last_char ,指针的比较在32位系统上建议转换成int后再比较,譬如(int)str < (int)last_char*/
{
char temp;
temp = *str;
*str++ = *last_char; /*这里试图修改了常量字符串存储区,常量字符串地址的内容是不能修改的*/
*last_char = *str;
}
while ( *last_char != '\0' )/*这里循环应该只打印一个感叹号后结束,程序最终输出结果应该是helloword!!*/
printf ( "%c", *last_char++ );
printf ( "What happened ?" );
system ("pause");
return 0;
页:
[1]