鱼C论坛

 找回密码
 立即注册
查看: 2710|回复: 4

新手求助 ,输出问题。。

[复制链接]
发表于 2013-10-22 00:33:27 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
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 然后就不动了 这是什么情况啊 没搞明白哪个地方出差错了。。。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2013-10-22 08:56:14 | 显示全部楼层
for语句里last_char != NULL这个判定语句是结束不了的。
另外,str指向的是字符串常量区,交换不了字符值的。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-10-22 17:07:53 | 显示全部楼层

谢谢啦 根据你说的我再仔细看看吧
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2013-10-28 18:54:00 | 显示全部楼层
我只能输出前面的后面的,中间的代码我不懂了,要是你会的话,把代码贴出来,大家一起学习:

代码

代码


想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2013-10-31 21:20:08 | 显示全部楼层
本帖最后由 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;
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-11-22 08:57

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表