可能重复:
为什么在写入字符串时会出现分段错误?
如果我有一个指针并且我知道两个字符的索引,我将如何交换字符(我实际上并没有分配一个数组)
IE
char *str = "hello"
我知道并且我想交换索引 0 和 4 的“h”和“o”,然后也返回指针。
我习惯了
temp = array[i];
array[i] = array[j];
array[j] = temp;
可能重复:
为什么在写入字符串时会出现分段错误?
如果我有一个指针并且我知道两个字符的索引,我将如何交换字符(我实际上并没有分配一个数组)
IE
char *str = "hello"
我知道并且我想交换索引 0 和 4 的“h”和“o”,然后也返回指针。
我习惯了
temp = array[i];
array[i] = array[j];
array[j] = temp;
好吧,您不能使用指向字符串文字的指针。字面量是不可变的。坚持你一直做的方式。
temp = array[i];
array[i] = array[j];
array[j] = temp;
以下声明:
char *str = "hello";
应该是,警告您不安全的行为:
const char *str = "hello";
因为根据 C 标准,尝试修改字符串是一种未定义的行为,所以您应该使用数组。
char str[] = "hello";
然后,交换数组的元素既简单又安全:
char tmp = str[0];
str[0] = str[4];
str[4] = tmp;
一些操作系统/编译器允许您修改字符串文字,主要是 AIX 5.1。
如果修改代码中的字符串文字,那么让您的代码跨平台变得很痛苦,因为您必须重写代码才能为 Linux 编译。