C:字符交换

时间:2013-01-27 11:40:10

标签: c pointers char

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

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;

}

3 个答案:

答案 0 :(得分:5)

char *s1 = "string1";

因为s1指向字符串文字并且修改了C中的undefined behaviour。这就是为什么这不起作用。

而在此char s1[] = "string1";

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

答案 1 :(得分:2)

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

答案 2 :(得分:1)

这行代码创建了一个无法更改的字符串文字。它只是可读的。

char *s1 = "string1";

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

虽然您的评论示例:

 char s1[] = "string1";

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