c - 反转指向数组的指针

标签 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]

这很好!但是我该如何存储它们呢?提前谢谢你

最佳答案

问题是在 main 中,s 指向一个字符串文字。这些文字通常存储在只读内存中,因此无法修改。

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

char s[] = "Hallo world!";

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

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

...

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

关于c - 反转指向数组的指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35088603/

相关文章:

C编程递归

javascript - 如何从迭代中获取 "unset"元素

c - Free() 指向 Struct 的指针,位于 Struct 内部

c - 指向结构数组中第一个结构的指针?

c - C中访问段错误的原因是什么

c - clock_gettime系统调用的clk_id有什么区别

java - 不明白输出

java - 想知道如果数组的长度是偶数我该怎么办

在指针上调用 free 两次

c - floor() 是否返回可以完全表示的东西?