我正在尝试执行交换操作,如下程序所示,但当我将元素 b 复制到 a 中时(swap() 方法中的第 3 行),它似乎崩溃了 - 如果输入是字符字符串,则会发生这种情况,即, 字符 *str;如果它是一个字符数组(如 char str[];),则交换操作可以正常工作。
#include<stdio.h>
void swap(char *a, char *b)
{
char tmp;
tmp = *a;
*a = *b; /* crash occurs here */
*b = tmp;
}
void func(char *a)
{
swap(a+1, a+2);
}
int main()
{
char *str = "abc";
// char str[] = "abc"; /* with this char array, the above swap func works */
func(str);
}
我认为这与一些我似乎不知道的C字符串规则有关。请帮忙!
最佳答案
字符串文字是只读,尝试修改字符串文字会导致未定义的行为。
最简单的解决方案?将其声明为数组:
char str[] = "abc";
关于c - 交换 char 数组的元素可以工作,但交换 char 字符串的元素会导致核心转储,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30626127/