读书人

找错解决思路

发布时间: 2013-11-11 14:02:17 作者: rapoo

找错


//请找出下面代码中的所有错误
   说明:以下代码是把一个字符串倒序,如“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);
   }

读书人网 >C++

热点推荐