请问各位,这个函数错在哪里?编译通过,运行错误。

 所属目录:Java   |   类型:技术问答   |   时间:2007-05-21
 问题:

这个函数的功能是将字符串逆序,输出  
  void   reverse_string(char   *str)  
  {  
          char   *last_char;  
           
          for(last_char=str;   *last_char!=\0;   last_char++);  
           
          last_char--;  
           
          while(str<last_char)  
          {  
                  char   temp;  
                  temp=*str;  
                  *str++=*last_char;  
                  *last_char--=temp;  
          }  
          printf("%s",str);  
  }

· 网友精彩回答:

发表者:antter

void   reverse_string(char   *str)  
  {  
          char   *last_char;  
           
          for(last_char=str;   *last_char!=\0;   last_char++);  
           
          last_char--;  
          char*   old_str=str;  
          while(old_str<last_char)  
          {  
                  char   temp;  
                  temp=*str;  
                  *str++=*last_char;//   你的str也在变化  
                  *last_char--=temp;  
          }  
  str=old_str;  
          printf("%s",str);  
  }

发表者:liubingqian

已调试  
  void   reverse_string(char   *str)  
  {  
  char   *last_char,   *strbackup   =   str;  
  int   halfstr_len,   tmp   =   1;  
   
  for(last_char=str;   *last_char!=\0;   last_char++);  
   
  halfstr_len   =   (   last_char   -   str   )   /   2;  
  last_char--;  
   
  //可以改成for循环  
  while(   tmp   <=   halfstr_len   )  
  {  
  char   temp;  
  temp   =   *str;  
  *str++   =   *last_char;  
  *last_char--   =   temp;  
  ++tmp;  
  }  
   
  printf("%s",   strbackup);  
  }

发表者:jixingzhong

void   reverse_string(char   *str)  
  {  
          char   *last_char;  
           
          for(last_char=str;   *last_char!=\0;   last_char++);          
           
          last_char--;                                     //这里只是为了求串长,就用库函数好了啊  
                                                                      //last_char=strlen(str);  
           
          while(str<last_char)                 //条件有误,你要的是比较位置,  
                                                                  //而不是比较字符的大小              
          {  
                  char   temp;  
                  temp=*str;  
                  *str++=*last_char;  
                  *last_char--=temp;  
          }  
          printf("%s",str);  
  }  
   
   
   
  改成这样:  
   
  int     num,position=0;  
   
  for(last_char=str;   *last_char!=\0;   last_char++);  
           
          last_char--;                           //指导串尾  
   
  num=strlen(str);                             //串长度  
   
  while(position<num)                        
          {  
   
                  temp=*str;  
                  *str++=*last_char;  
                  *last_char--=temp;  
          };  
   
   
  printf("%s",str);

发表者:xuanwenchao

void   reverse_string(char   *str)  
  {  
          int   i=0;                   /*<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<*/  
          char   *last_char;  
           
          for(last_char=str;   *last_char!=\0;   last_char++);  
           
          last_char--;  
           
          while(str<last_char)  
          {  
                  char   temp;  
                  temp=*str;  
                  *str++=*last_char;  
                  *last_char--=temp;  
                  i++;         /*<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<*/  
   
          }  
          str-=i;         /*<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<*/  
   
          printf("%s",str);  
  }

发表者:cai_min

#include   <stdio.h>  
  void   reverse_string(char   *str)  
  {  
          char   *last_char=str;  
  while(*last_char!=\0)  
  last_char++;  
  last_char--;  
           
          while(str<last_char)  
          {  
                  char   temp;  
                  temp=*str;  
                  *str=*last_char;  
                  *last_char=temp;  
  str++;  
  last_char--;  
   
          }  
           
  }  
   
  main()  
  {  
  char   a[]="abcde";  
  reverse_string(a);  
  printf("%s",a);  
   
  }  
  已调试通过  
  原因在于你原来子函数   中while(str<last_char)  
          {  
                  char   temp;  
                  temp=*str;  
                  *str++=*last_char;  
                  *last_char--=temp;  
          }  
          printf("%s",str);  
  其实str指针已经移动了啊,所以就不能输出整个字符串了,我现在把这一句移到主函数中,就行了。

发表者:pure_flame

char*   str="abcde";  
  相当于常量,不可以再对str的内容进行改变,将char   *str变为char   str[]即可.  
  另外输出是str指针指向当前位置,不再是字符串的首地址了

.
处理 SSI 文件时出错
© 2006-2008 All Rights Reserved