【问题标题】:C : Character swapping [duplicate]C:字符交换[重复]
【发布时间】:2013-01-10 21:39:10
【问题描述】:

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

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;

}

【问题讨论】:

  • 因为,当您为字符数量分配内存时,它只能读取,不能执行或写入。当您尝试在那里写时,它会给您例外。

标签: c pointers char


【解决方案1】:
char *s1 = "string1";

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

而在这个char s1[] = "string1";

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

【讨论】:

    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

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

      char *s1 = "string1";
      

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

      虽然您的评论示例:

       char s1[] = "string1";
      

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-01-29
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多