反转指向数组

时间:2016-01-29 15:53:06

标签: c arrays pointers

我有一个指向数组的简单指针,我想要反转该数组,这是我写的代码:

void str_reverse(char *s) {
    int l, r;
    l = 0;
    r = str_len(s) - 1;
    char temp;
    printf("length %i ", r);
    while (l <= r) {
        temp = *(s + l);
        printf("\n%c [%i] | %c [%i]\n", temp, l, *(s + r), r);

        *(s + l) = *(s + r);
        *(s + r) = temp;
        r--;
        l++;
    }
}

你可以看到我使用这个功能:

int str_len(char *p) {
    int l = 0;
    while (*(p + l) != '\0') {
//        printf("%c %i", *(p + l),l);
        l++;
    }
    return l;
}

我命令得到我的数组的长度,这是我的小主要

int main() {
    char *s = "Hallo world!";

    str_reverse(s);

    return 0;
}

这是输出:

length 10 
H [0] | d [10]
Bus error: 10

现在我尝试只打印值,所以在str_reverse的while循环中我评论了这两行:

*(s + l) = *(s + r);
*(s + r) = temp;

这是输出:

H [0] | ! [11]

a [1] | d [10]

l [2] | l [9]

l [3] | r [8]

o [4] | o [7]

  [5] | w [6]

那很好!但我怎么能存储它们?提前谢谢

1 个答案:

答案 0 :(得分:2)

问题在于mains指向字符串文字。这些文字通常存储在只读存储器中,因此无法修改它们。

s更改为使用字符串文字初始化的数组,它将起作用。

char s[] = "Hallo world!";

使用动态分配的内存也可以:

#include <stdlib.h>
#include <string.h>

...

char *s = strdup("Hallo world!");
str_reverse(s);
free(s);