请找出下面代码中的所有错误。说明:以下代码是把一个字符串倒序,如“abcd”倒序后变为“dcba”。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
1
#include
"string.h"
2
int
main()
3
{
4
char
*src =
"hello,world"
;
5
char
*dest = NULL;
6
int
len = strlen(src);
7
dest = (
char
*)malloc(len);
8
char
*d = dest;
9
char
*s = src[len];
10
while
(len-- !=
0
)
11
*d++ = *s--;
12
printf(
"%s"
, dest);
13
return
0
;
14
15
}
|
正确答案: A B C D
第7行要为'\0'分配一个空间
第9行改成char * s = &src[len-1]
第12行前要加上*d = '\0'
第13行前要加上free(dest)释放空间
解析
方法1:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
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
;
}
|
方法2:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
int
main()
{
char
str[] =
"hello,world"
;
int
len = strlen(str);
char
t;
for
(
int
i =
0
; i < len; i++)
{
t = str[i];
str[i] = str[len - i -
1
];
str[len - i -
1
] = t;
}
printf(
"%s"
, str);
return
0
;
}
|