字符逆序改错题,面试中经常遇到,本人已经遇到两次!!

发布时间 2023-10-20 12:15:28作者: 潘阳399

题目:请找出下面代码的所有错误,说明:一下代码是把一个字符串倒序,如"abcd"倒序为"dcba",以下是引用的代码

 1 #include "string.h" 
 2 main()
 3 {
 4     char* pSrc = "hello,world";
 5     char* pDest = NULL;
 6     int iLen = strlen(pSrc);
 7     pDest = (char*)malloc(iLen);
 8     char* pD = pDest;
 9     char* pS = pSrc[iLen];
10     while (iLen-- != 0)
11     {
12         pD++ = pS--;
13     }
14     printf("%s", pDest);
15     return 0;
16 }

自己的回答,不对的请大家补充指正。

 

错误:第1行:" "包含的是自定义头文件 ,strlen函数包含头文件<string.h> ,malloc函数使用要包含头文件<stdlib.h> ,printf函数要包含头文件<stdio.h>

     第2行:main  要有返回值类型 int

   第7行:由于字符串是以'\0'结尾的,所以在申请内存空间要iLen+1

   第9行:题目中是用数组里的元素给地址赋值,要改为pS=&[iLen -1] ,因为逆序不是从最后的'/0'开始,而是从'd'开始,一共有11个字符,'d'字符的下标为10

   第12行:那是地址之间赋值,逆序要的是字符数组里的元素进行赋值,要解引用,*pD++=*pS--;

   跳出while循环后,此时pD指向最后一个地址,因为时字符串,所以要加上'\0',要不然指向的垃圾数据。

  此外,malloc申请的是堆区内存,用完之后要free()进行释放,要不然会导致内存泄漏。

改正后代码如下:

 1 #include <string.h>
 2 #include <stdlib.h>
 3 #include <stdio.h>
 4 
 5 int main()
 6 {
 7     char* pSrc = "hello,world";
 8     char* pDest = NULL;
 9     int iLen = strlen(pSrc);
10     pDest = (char*)malloc(iLen+1);
11     char* pD = pDest;
12     char* pS = &pSrc[iLen-1];
13     while (iLen-- != 0)
14     {
15         *pD++ = *pS--;
16     }
17     *pD = '\0';
18     printf("%s", pDest);
19     free(pDest);
20     return 0;
21 }

 

执行后结果如下: