急急急急急急急急急急急

#include
void swap(char *x, char *y)
{ char t;
t=*x; *x=*y; *y=t;
}
main()
{ char *s1="abc", *s2="123";
swap(s1,s2); printf("%s,%s\n",s1,s2);
}
为什么*x=*y会有错误呢

“abc"和"123" 是字符串常量,c/c++编译器会将字符串常量存储在只读内存区域(Read only data).
也就是说,只能读取该此字符串常量的值,而不能试图修改,即:

 char *s = "abc"
*s = 'r' //error

但可以通过交换两个指针达到交换两个字符串的目的,如何在子函数中交换两个指针呢,需要用到指向指针的指针,
修改的程序如下:

/* Swaps strings by swapping pointers */
void swap1(char **str1_ptr, char **str2_ptr)
{
  char *temp = *str1_ptr;
  *str1_ptr = *str2_ptr;
  *str2_ptr = temp;
}  

int main()
{
  char *str1 = "abc";
  char *str2 = "123";
  swap1(&str1, &str2);
  printf("str1 is %s, str2 is %s", str1, str2);
  getchar();
  return 0;
}

如果对您有帮助,请点击采纳答案好吗,谢谢~~

你定义的函数作用对象是两个指针,而下面你只直接swap(s1,s2)

我觉得 你要是写
char *s1 = "abc" 代表s1 所指的是字符串常量,不是变量 ,不能交换值;