#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 所指的是字符串常量,不是变量 ,不能交换值;