可能重复:
Why do I get a segmentation fault when writing to a string?
如果我有一个指针并且我知道两个字符的索引,我将如何交换字符(我实际上没有分配数组)
即。
char *str = "hello"
我知道并且我想交换索引0和4的'h'和'o',然后返回指针。
我习惯于做
的惯例temp = array[i];
array[i] = array[j];
array[j] = temp;
答案 0 :(得分:3)
嗯,你不能用指向字符串文字的指针。文字是不可改变的。坚持你总是这样做的方式。
答案 1 :(得分:1)
temp = array[i];
array[i] = array[j];
array[j] = temp;
答案 2 :(得分:1)
以下声明:
char *str = "hello";
应该警告你不安全的行为:
const char *str = "hello";
因为根据C标准尝试修改字符串litteral是一种未定义的行为,所以你应该使用数组。
char str[] = "hello";
然后,交换数组的元素既简单又安全:
char tmp = str[0];
str[0] = str[4];
str[4] = tmp;
答案 3 :(得分:0)
某些操作系统/编译器允许您修改字符串文字,主要是AIX 5.1。
如果修改了代码中的字符串文字,那么让代码跨平台就太麻烦了,因为你必须重写代码来编译Linux。