关于函数strrev的实现

时间:2021-09-02 03:09:52
#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


引用 2 楼 mymtom 的回复:
strrev不是标准函数。估计是TC 2.0下的吧。
C/C++ code?123456789101112131415161718192021222324252627282930313233/** * @file    strrev.c * @brief    */ #include <stdio.h>#include <string.h> char *strrev(c……

楼主就是厉害,呵呵,不过我想问一下,while的循环条件比的是指针所指的地址的大小么,地址也是可以比较大小的?另外楼主这一行多了一个百分号(printf("h=%p,t=%p\n", h, t);)。

#6


引用 5 楼 shirui8653719 的回复:
楼主就是厉害,呵呵,不过我想问一下,while的循环条件比的是指针所指的地址的大小么,地址也是可以比较大小的?另外楼主这一行多了一个百分号(printf("h=%p,t=%p\n", h, t);)。 

是的,地址可以比较大小的!
确实多了个百分号! 关于函数strrev的实现

#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


引用 2 楼 mymtom 的回复:
strrev不是标准函数。估计是TC 2.0下的吧。
C/C++ code?123456789101112131415161718192021222324252627282930313233/** * @file    strrev.c * @brief    */ #include <stdio.h>#include <string.h> char *strrev(c……

楼主就是厉害,呵呵,不过我想问一下,while的循环条件比的是指针所指的地址的大小么,地址也是可以比较大小的?另外楼主这一行多了一个百分号(printf("h=%p,t=%p\n", h, t);)。

#6


引用 5 楼 shirui8653719 的回复:
楼主就是厉害,呵呵,不过我想问一下,while的循环条件比的是指针所指的地址的大小么,地址也是可以比较大小的?另外楼主这一行多了一个百分号(printf("h=%p,t=%p\n", h, t);)。 

是的,地址可以比较大小的!
确实多了个百分号! 关于函数strrev的实现