使用指针交换字符串的第一个字符

问题描述 投票:1回答:1

我对使用C语言中的指针有点陌生。因此,我一直试图适应它们。所以我想做的就是使用指针交换两个字符串的第一个字符。这是我想出的]

#include <stdio.h>

void swap_first_char(char *s1, char *s2) {
    char temp = *s1;
    *s1 = *s2;
    *s2 = temp;
}

int main() {
    char *str1 = "ASTRING";
    char *str2 = "BSTRING";
    swap_first_char(str1,str2);
    printf("str1 = %s, str2 = ‰s\n", str1, str2);
    return 0;
}

所以,这是我现在的理解。 str1和str2保存“ ASTRING”和“ BSTRING”的第一个字符的地址。因此,当我将它们传递给swap_first_char(char*, char*);函数时,现在s1保存字符串“ ASTRING”的第一个字符的地址,而s2保存字符串“ BSTRING”的第一个字符的地址。因此,我可以取消引用它们并交换它们以交换两个字符串的第一个字符,对吗?

但是在执行这段代码时,我总是遇到分段错误。如果有人能告诉我为什么,我将不胜感激。谢谢^ _ ^

c pointers
1个回答
0
投票

将其扩展为一个我可以使用一些代码的答案:字符串常量-带引号的字符串-通常(但不是必须)是只读的,从某种意义上说,编译器允许您将其中的一个分配给它是一个肮脏的技巧。一个char *(将允许您对其进行写操作),而不是const char *(这将禁止它进行写入)。

替换

char *str1 = "ASTRING";
char *str2 = "BSTRING";

with

char str1[] = "ASTRING";
char str2[] = "BSTRING";

实际上可以解决问题(正如我在使用gcc的x86系统上测试的那样)。在后一种情况下,编译器将分配字符串的完整数组(加上NUL字节),而在前一种情况下,它只是指向在其他位置分配的字节的指针。

© www.soinside.com 2019 - 2024. All rights reserved.