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