user-0 提问: 为什么这段代码一运行就.exe停止工作？？

回复:
user: user-1
content: 很简单，因为char *s1="abc",*s2="123";这样写是不真确的写法 "abc"是常量字符串，保存在只读的内存块里。应该养成这样写的习惯： const char* s1="abc";  char s1[] = "abc"; //这样就OK，是用常量字符串"abc"初始化局部变量字符数组s1

user: user-2
content: 因为char1和char2都指向了常量区，内存的内容应该不能变的吧？

user: user-3
content: 和传的值得地址有关

user: user-3
content: #include <stdio.h> void swap(char *x,char *y) {     char *t;     t=x;x=y;y=t;    printf("%s,%s\n",s1,s2); }   int main(void) {     char *s1="abc",*s2="123";     swap(s1,s2);      }

user: user-4
content: http://bbs.csdn.net/topics/350206749 函数传递大总结。什么时候交换成功，什么时候交换不成功，lz参考下吧

user: user-0
content: 引用 18 楼 zeuong 的回复:因为你S1和S2都是指向一个字符串常量，怎么可能调换他们头字母，改成数组就行了 谢谢，，我居然发现这试卷里面的Bug了！

user: user-4
content: 引用 31 楼 u013529401 的回复:[quote=引用 16 楼 zeuong 的回复:] void swap(char* x, char* y) { 	char temp; 	temp = *x; 	*x = *y; 	*y = temp; }  int main() { 	char s1[20] = "abc"; 	char s2[20] = "123"; 	swap(s1,s2); 	printf("%s,%s\n",s1,s2); 	getchar(); 	return 1; }对的，但是为什么要改掉成char s1[20] = "abc"; 	char s2[20] = "123";[/quote]  这样就不会抛出异常了，具体参考10楼的解释。

user: user-4
content: 引用 28 楼 u013529401 的回复:[quote=引用 27 楼 huoqingna2332 的回复:] [quote=引用 26 楼 YTerrenceLau 的回复:] 楼主的需求，16楼不就是答案么。  要1bc,a23 ， 16楼的就是[/quote]你的是对的，但是为什么要把指针改成形式改成数组形式啊？[/quote]  这个是为了告诉你，你开始的代码异常的错误，参考我10楼的解释。

user: user-0
content: 引用 16 楼 zeuong 的回复:void swap(char* x, char* y) { 	char temp; 	temp = *x; 	*x = *y; 	*y = temp; }  int main() { 	char s1[20] = "abc"; 	char s2[20] = "123"; 	swap(s1,s2); 	printf("%s,%s\n",s1,s2); 	getchar(); 	return 1; }对的，但是为什么要改掉成char s1[20] = "abc"; 	char s2[20] = "123";

user: user-5
content: 引用 27 楼 huoqingna2332 的回复:[quote=引用 26 楼 YTerrenceLau 的回复:] 楼主的需求，16楼不就是答案么。  要1bc,a23 ， 16楼的就是[/quote] 那么就要定义把字符串存在栈或上堆上，不要放在全局静态数据区。

user: user-0
content: 引用 27 楼 huoqingna2332 的回复:[quote=引用 26 楼 YTerrenceLau 的回复:] 楼主的需求，16楼不就是答案么。  要1bc,a23 ， 16楼的就是[/quote]说错了，以为你是16L了

user: user-0
content: 引用 27 楼 huoqingna2332 的回复:[quote=引用 26 楼 YTerrenceLau 的回复:] 楼主的需求，16楼不就是答案么。  要1bc,a23 ， 16楼的就是[/quote]你的是对的，但是为什么要把指针改成形式改成数组形式啊？

user: user-4
content: 引用 26 楼 YTerrenceLau 的回复:楼主的需求，16楼不就是答案么。  要1bc,a23 ， 16楼的就是

user: user-6
content: 楼主的需求，16楼不就是答案么。

user: user-0
content: 引用 19 楼 huoqingna2332 的回复:void swap(char **x,char **y) { 	char *temp = NULL; 	temp=*x; 	*x=*y; 	*y=temp; }  main() { char str1[]="abc";  char str2[]="123";  char *p1=str1;  char *p2=str2;  printf("%s\n",p1);  printf("%s\n",p2); swap(&p1,&p2);  printf("%s\n",p1);  printf("%s\n",p2); }谢谢啊，可是怎么才能让他输出1bc,a23啊，这答案就是这个

user: user-0
content: 引用 20 楼 user-7 的回复:这样 void swap(char *x,char *y) { 	char *t; 	t=x;x=y;y=t; }  void test2(void) { 	char *s1="abc",*s2="123"; 	swap(s1,s2); 	printf("%s,%s\n",s1,s2); }结果不是1bc,a23啊？

user: user-6
content: ，还有交换字符这种需求，服了。匿了，貌似楼上有人给出答案了。

user: user-0
content: 引用 12 楼 yfl819586803 的回复: #include<stdio.h> 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); } 这个虽然可以执行，但是与原题不符啊，这题输出结果答案是1bc,a23,而且他给的代码就是开始那段，是不是哪弄错了？ 谢谢各位回答~

user: user-7
content: vc6.0 测试通过，

user: user-7
content: 这样 void swap(char *x,char *y) { 	char *t; 	t=x;x=y;y=t; }  void test2(void) { 	char *s1="abc",*s2="123"; 	swap(s1,s2); 	printf("%s,%s\n",s1,s2); }