#include <syslib.h>
#include <string.h>
main()
{
char *s="Welcome To Beijing";
clrscr();
textmode(0x00); // 6 lines per screen
printf("%s\n%s",s,strrev(strdup(s)));
getchar();
return 0;
}
上面这段代码是我在网上看到的,本来是想看看关于strrev函数的一些代码,但是我在VC6.0上运行为什么不行,谁能帮我看看。谢谢了
6 个解决方案
#1
是在这上面http://www.2cto.com/shouce/chssc/string/strrev.html 看到的。
#2
strrev不是标准函数。估计是TC 2.0下的吧。
/**
* @file strrev.c
* @brief
*/
#include <stdio.h>
#include <string.h>
char *strrev(char *s)
{
char *h, *t;
char c;
h = s;
t = s + strlen(s) - 1;
printf("%h=%p,t=%p\n", h, t);
while (h < t) {
c = *h;
*(h++) = *t;
*(t--) = c;
}
return s;
}
int main(int argc, char *argv[])
{
char s[] = "012345678";
printf("[%s]\n", strrev(s));
return 0;
}
#3
strdup后需要free, 楼主的程序有内存泄漏。 strrev是POSIX的接口,估计在*unix中有。
#4
windows下还真没见过这样的api
#5
楼主就是厉害,呵呵,不过我想问一下,while的循环条件比的是指针所指的地址的大小么,地址也是可以比较大小的?另外楼主这一行多了一个百分号(printf("h=%p,t=%p\n", h, t);)。
#6
是的,地址可以比较大小的!
确实多了个百分号!
#1
是在这上面http://www.2cto.com/shouce/chssc/string/strrev.html 看到的。
#2
strrev不是标准函数。估计是TC 2.0下的吧。
/**
* @file strrev.c
* @brief
*/
#include <stdio.h>
#include <string.h>
char *strrev(char *s)
{
char *h, *t;
char c;
h = s;
t = s + strlen(s) - 1;
printf("%h=%p,t=%p\n", h, t);
while (h < t) {
c = *h;
*(h++) = *t;
*(t--) = c;
}
return s;
}
int main(int argc, char *argv[])
{
char s[] = "012345678";
printf("[%s]\n", strrev(s));
return 0;
}
#3
strdup后需要free, 楼主的程序有内存泄漏。 strrev是POSIX的接口,估计在*unix中有。
#4
windows下还真没见过这样的api
#5
楼主就是厉害,呵呵,不过我想问一下,while的循环条件比的是指针所指的地址的大小么,地址也是可以比较大小的?另外楼主这一行多了一个百分号(printf("h=%p,t=%p\n", h, t);)。
#6
是的,地址可以比较大小的!
确实多了个百分号!