T_未命名 发表于 2013-10-22 00:33:27

新手求助 ,输出问题。。

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 然后就不动了 这是什么情况啊 没搞明白哪个地方出差错了。。。

tsembrace 发表于 2013-10-22 08:56:14

for语句里last_char != NULL这个判定语句是结束不了的。
另外,str指向的是字符串常量区,交换不了字符值的。

T_未命名 发表于 2013-10-22 17:07:53

tsembrace 发表于 2013-10-22 08:56 static/image/common/back.gif
for语句里last_char != NULL这个判定语句是结束不了的。
另外,str指向的是字符串常量区,交换不了字符值的 ...

谢谢啦 根据你说的我再仔细看看吧

CL0419 发表于 2013-10-28 18:54:00

我只能输出前面的后面的,中间的代码我不懂了,要是你会的话,把代码贴出来,大家一起学习:



ambition1982 发表于 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;
页: [1]
查看完整版本: 新手求助 ,输出问题。。