代码如下:
#include<stdio.h>
void Swap(char*r,char*s){
char p;
p=*r;
*r=*s;
*s=p;
}
main(){
char*s1="abc";
char*s2="123";
Swap(s1,s2);
printf("%c,%c",*s1,*s2);
}
代码执行不了,在调试的时候执行到*r=*s;就执行不下去了,这是为什么,哪位大神帮帮忙
#include <stdio.h> void Swap(char **r, char **s) { char *p; p = *r; *r = *s; *s = p; } int main() { char *s1 = "abc"; char *s2 = "123"; Swap(&s1, &s2); printf("%s,%s", s1, s2); return 0; }
你这种还是值传递啊!能运行?
@lzj123: 贴过去试试不就知道了么
@jello chen: 为啥我的就不行?
@lzj123: 报错么,什么错
@jello chen: 没有做任何操作,说了你这个程序等于值传递,方法执行完变量就释放了
@lzj123:
#include <stdio.h>
void Swap(char *r,char *s){
char p;
p = *r;
*r = *s;
*s = p;
}
main(){
int s1 = 2;
int s2 = 5;
int *i=&s1,*j=&s2;
Swap(i,j);
printf("%d,%d\n",s1,s2);
}
这个程序是可以运行的
@lzj123: 我机器上没问题
@jello chen: 谢谢了,我知道什么问题了!
@jello chen: 你这个只是char的Swap呀,你本来不是想要的是string或者说是char *的Swap么
@lzj123:
普通char指针是不能指向常量字符串的,并且因为“abc”“123”是常量字符串,也不能被修改。
要想操作字符串,就应该给它们分配实际的存储空间,所以应把 s1 和 s2 声明为字符数组:
@lzj123: what?
@jello chen: 就是上面这个问题,看懂了没
@lzj123:
#include <stdio.h>
void Swap(char *r,char *s){
char p;
p = *r;
*r = *s;
*s = p;
}
main(){
char s1[] = "abc";
char s2[] = "123";
char *i=s1,*j=s2;
int k;
Swap(i,j);
for(k=0;k<3;k++){
printf("%c",s1[k]);
}
printf("\n");
for(k=0;k<3;k++){
printf("%c",s2[k]);
}
printf("\n");
}
这是正确代码
@lzj123: 我以为你明白这个,汗
@jello chen: 不管怎样,谢谢你的答复
*r = s 这一句是错误的,r表达式不能作为左值