我正在尝试使用xor按位运算符而不是使用占位符在字符串中交换字符。但是,在执行按位异或之前,它会出现段错误。谁能解释为什么会这样?字符有什么不允许我进行按位运算的吗?
df1[2:1]
答案 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
显而易见的情况之一
标准不是说字符串文字是只读的,但是另一方面也没有相反的说法。在实践中,字符串文字在大多数C实现中都以只读区域结尾。从技术上讲,它们确实具有类型char[]
,这意味着我应该可以修改,但是修改(或尝试修改)它们是未定义的行为,因此请避免这种情况。
http://port70.net/~nsz/c/c11/n1570.html#6.4.5p7
如果程序尝试修改此类数组,则行为未定义。
关于您的代码的其他三个注释:
(int)(length / 2)
中的强制转换是完全不必要的。只需写length / 2
,因为那已经是一个整数了。
无需编写您自己的函数来查找字符串长度。只需写length = strlen(str)
。
跳过return 0
。仅当您想在结尾之前退出或要返回非0的值时,才在main
中使用return语句。自C99以来就可以。
答案 1 :(得分:1)
使用数组而不是使用指针
char str[] = "bananas';
您不能修改字符串文字,但可以修改数组。