为什么这个字符串反向程序不起作用?

时间:2016-07-24 14:12:55

标签: c

这是一个不使用strlen()strrev()函数的字符串反转程序。关于此代码,请帮助我:length函数显示11,但reverse函数无效。

#include <stdio.h>
#include <conio.h>

int length(char*);
char *reverse(char*);

main() {
    printf("%d", length("himanshupal"));
    printf("%s", reverse("himanshupal"));
    getch();
}

/* used to calculate the lenghth*/
int length(char *p) {
    int l;

    for (l = 0; *(p+l) != '\0'; l++);
    return (l);
}

char *reverse(char *p) {  // function for reversing the string
                          // l used for length
    int i, l;
    char t;

    for (l = 0; *(p+l) != '\0'; l++);
    for (i = 0; i < l / 2; i++) {
        t = *(p+i);
        *(p+i) = *(p+l-1-i);
        *(p+l-1-i) = t;
    }
    return (p);
}

1 个答案:

答案 0 :(得分:1)

字符串文字在C和C ++中是不可变的。任何修改字符串文字的尝试都会导致未定义的行为。:)

请改用字符数组。例如

init

考虑到声明像

这样的函数长度更好
    int main( void )
    //^^^^^^^^^^^^^^
    {
        char s[] = "himanshupal";
        printf( "%d\n", length( s ) );
        printf( "%s\n", reverse( s ) );
        getch();
    }