gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-03 23:36:46 25 4
gpt4 key购买 nike

我对在 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 保存了字符串“ASTRING”的第一个字符的地址字符串“BSTRING”。所以我可以取消引用它们并交换它们以交换两个字符串的第一个字符,对吗?

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

最佳答案

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

替换

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

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

确实解决了问题(在我的 x86 系统上用 gcc 测试过)。在后一种情况下,编译器正在分配字符串的完整数组(加上 NUL 字节),而在前者中,它只是指向分配在别处的字节的指针。

关于c - 使用指针交换字符串的第一个字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58673800/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com