找错解决思路

找错

//请找出下面代码中的所有错误 
   说明:以下代码是把一个字符串倒序,如“abcd”倒序后变为“dcba” 
   #include "string.h " 
   main() 
   { 
    char*src= "hello,world "; 
    char* dest=NULL; 
    int len=strlen(src); 
    dest=(char*)malloc(len); 
    char* d=dest; 
    char* s=src[len]; 
    while(len--!=0) 
    d++=s--; 
   printf( "%s ",dest); 
    return 0; 
   } 
C++

------解决方案--------------------

   int main() 
   { 
    char* src = "hello,world "; 
    int len = strlen(src); 
    char* dest = (char*)malloc(len+1);//要为\0分配一个空间 
    char* d = dest; 
    char* s = &src[len-1];//指向最后一个字符 
    while( len-- != 0 ) 
    *d++=*s--; 
    *d = 0;//尾部要加\0 
    printf( "%s\n ",dest); 
    free(dest);// 使用完,应当释放空间,以免造成内存汇泄露 
    return 0; 
   }

------解决方案--------------------
跟上面差不多, 主要多一个malloc检查返回值要检查.

//请找出下面代码中的所有错误 
   说明:以下代码是把一个字符串倒序,如“abcd”倒序后变为“dcba” 
   #include "string.h " 
   main() 
   { 
    char*src= "hello,world "; 
    char* dest=NULL; 
    int len=strlen(src);
    dest=(char*)malloc(len);  // 错误1: 应该: len+1
    char* d=dest;                 // 错误2: 没有检查返回值是否为NULL
    char* s=src[len];             // 错误3: 应该 str+len-1
    while(len--!=0)               // 建议1: len-- > 0
    d++=s--;                       // 错误4: 应该: *d++ = *s--
   printf( "%s ",dest);           // 错误5: 指针未设置0: *d = '\0'
    return 0;                         // 错误6: d内存未释放: free(dest);
   }