这个问题在这里已经有了答案:




8年前关闭。






我想编写一个函数来反转传递给它的给定字符串。
但是我不能。如果我为 doReverse 函数(见下面的代码)提供一个字符数组,我的代码运行良好。

我不明白为什么这不起作用。
我可以访问 str[0] 中的 doReverse ,但我无法使用字符指针更改数组的任何值。有任何想法吗?

void doReverse(char *str) {
    str[0] = 'b';
}

void main(void) {
    char *str = "abc";
    doReverse(str);
    puts(str);
}

更新:

我知道如何通过将字符数组传递给它来编写反向函数:
void reverse1(char p[]) {
    int i, temp, y;

    for (i = 0, y = strlen(p); i < y; ++i, --y) {
        temp = p[y-1];
        p[y-1] = p[i];
        p[i] = temp;
    }
}

但是,我想编写另一个将字符指针作为参数的版本。

最佳答案

最简单的解决方法是将str的声明改为

char str[] = "abc";

这使得 str 成为初始化为字符串“abc”的字符数组。目前您有 str 作为指向字符的指针,初始化为指向由字符串文字描述的字符串。有一个关键区别:字符串文字是只读的,以便编译器在存储它们的位置上具有最大的灵活性;修改它们是UB。但是 char 数组是可变的,因此可以修改它们。

附注。 main() 返回 int

关于c - 修改 C 字符串常量?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/480555/

10-12 17:45
查看更多