为什么我不能使用按位异或来交换字符串中的字符?

时间:2019-06-02 20:04:22

标签: c

我正在尝试使用xor按位运算符而不是使用占位符在字符串中交换字符。但是,在执行按位异或之前,它会出现段错误。谁能解释为什么会这样?字符有什么不允许我进行按位运算的吗?

df1[2:1]

2 个答案:

答案 0 :(得分:4)

字符串文字只能在C中读取。恩,不是真的,但是实际上是。所以改变

char* str = "bananas";

char str[] = "bananas"; // Store as an array and not a pointer

char* str = strdup("bananas"); // Dynamically allocate. Don't forget to free

这是arrays are not pointers

显而易见的情况之一

标准不是说字符串文字是只读的,但是另一方面也没有相反的说法。在实践中,字符串文字在大多数C实现中都以只读区域结尾。从技术上讲,它们确实具有类型char[],这意味着我应该可以修改,但是修改(或尝试修改)它们是未定义的行为,因此请避免这种情况。

http://port70.net/~nsz/c/c11/n1570.html#6.4.5p7

  

如果程序尝试修改此类数组,则行为未定义。

关于您的代码的其他三个注释:

  1. (int)(length / 2)中的强制转换是完全不必要的。只需写length / 2,因为那已经是一个整数了。

  2. 无需编写您自己的函数来查找字符串长度。只需写length = strlen(str)

  3. 跳过return 0。仅当您想在结尾之前退出或要返回非0的值时,才在main中使用return语句。自C99以来就可以。

答案 1 :(得分:1)

使用数组而不是使用指针

char str[] = "bananas';

您不能修改字符串文字,但可以修改数组。