c - 交换 char 数组的元素可以工作,但交换 char 字符串的元素会导致核心转储

标签 c arrays string

我正在尝试执行交换操作,如下程序所示,但当我将元素 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/

相关文章:

c - 在 C 中写入多个文件并迭代其名称

c# - 如何从 void 函数返回数据?

c# - 在 C# 中查找字符串的最快方法?

c++ - 获取下一个不连续的二进制数

c++ - 为什么 C 和 C++ 中的 main 函数的类型留给用户定义?

c - 是否可以使用 NSLog C 结构(如 CGRect 或 CGPoint)?

在 linux c 应用程序中创建自定义键盘快捷键

c - 访问结构体内部的数组时程序崩溃

php - 在数据库中获取玩家下一个排名 - Laravel 5.2

java - 在java中搜索数组时出现耗时问题