部分,而其中的赋值给place的point却居然是一个不确定的垃圾值。

  应该如何正确地给出这个问题的代码呢?正确解决问题的前提是正确地提出问题。原来问题的提法本身有很多不正确或不严谨的地方。例如,“将此字符串中长的单词输出”,这个要求本身是似是而非很不明确的。比如,字符串中有两个单词长度相同且都长于其他单词,究竟应该输出这两个单词中的任何一个还是需要同时输出这两个单词?再有,要求函数“输入一行字符”也非常无聊。为了能正确地解决问题,有必要对原问题的错误要求进行如下更正:

  写一个函数,输出字符串中的任一长度长的单词。这里所谓的单词,是指不含空白字符的连续字符序列。

#include  
  
void print_a_longestword ( const char [] ) ; 
int  be_white  ( const char )  ; 
int  find_begin( char const [] , unsigned ) ; 
int  find_end  ( char const [] , unsigned ) ; 
void output    ( char const [] , unsigned , unsigned ) ; 
  
int main( void ) 

   printf("%s中一长单词为:","");            //测试""  
   print_a_longestword(""); 
     
   printf("%s中一长单词为:"," ");      //测试" " 
   print_a_longestword(" "); 
  
   printf("%s中一长单词为:"," abc ");       //测试" abc " 
   print_a_longestword(" abc "); 
  
   printf("%s中一长单词为:"," abc abcd  "); //测试" abc abcd  " 
   print_a_longestword(" abc abcd  "); 
        
   return 0; 

  
void output( char const str[] , unsigned from , unsigned to ) 

   while(from < to) 
      putchar(str[from ++]); 
   putchar(‘ ‘);    

  
int find_end (  const char str[] , unsigned from ) 

      while( str[from]!=‘‘ && ! be_white( str[from] ) ) 
         from ++ ; 
      return from ;    

  
int find_begin (  const char str[] , unsigned from ) 

      while( be_white( str[from] ) ) 
         from ++ ; 
      return from ;    

  
int be_white( const char c ) 

   return       c == ‘ ‘    || 
             c == ‘ ‘  || 
             c == ‘ ‘  ; 

  
void print_a_longestword ( char const line[] ) 

   unsigned site = 0U ;    
   unsigned begin_longest , end_longest ; 
   begin_longest = end_longest = site    ; 
     
   do{ 
      int this_begin , this_end  ; 
        
      site = this_begin = find_begin ( line , site )    ;//单词开头  
      site = this_end  = find_end   ( line , site )     ;//单词结尾       
  
      if(   ( this_end    - this_begin )  
          > ( end_longest - begin_longest ) ){ 
         begin_longest = this_begin ; 
         end_longest   = this_end   ;      
      }      
  
   }while( line[ site ] != ‘‘) ;    
  
   output( line , begin_longest , end_longest ); 
}