关于指针:c:字符交换

C : Character swapping

本问题已经有最佳答案,请猛点这里访问。

我需要通过指针交换两个字符,但当我运行此代码时,程序崩溃。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
int main(){
    char *s1 ="string1";
    swap(st,(st+1));

    /* BUT THIS CODE WORKS - Whats the problem?
     * char s1[] ="string1";
     * swap(s1,&s1[1]);
     */


    return 0;
}

void swap(char * const ptr1, char * const ptr2){

    char temp = *ptr1;
    *ptr1 = *ptr2;
    *ptr2 = temp;

}


1
char *s1 ="string1";

因为s1指向一个字符串文字,修改会调用C中未定义的行为,所以这不起作用。

鉴于在本文件中

s1是一个数组,因此可以修改它。


不能修改字符串文字。您试图在代码中修改"string1",这是不允许的。实际上,许多编译器将字符串文本放在可能无法写入的特殊部分中。


这一行代码创建了一个不能更改的字符串文本。它只有可读性。

1
char *s1 ="string1";

任何改变它的尝试都会给你一个错误。

当您的评论示例:

1
 char s1[] ="string1";

创建实际数组。可以正常编辑和使用。