才开始学习c语言,字符串与指针方面不懂!
发布网友
发布时间:2023-05-03 11:00
我来回答
共4个回答
热心网友
时间:2023-10-19 16:51
swap(char *s1,char *s2)
{
char *t;
t=s1;s1=s2;s2=t;
}
2:30考马哲了,冒着挂科的危险来回答你,这个函数有问题。应该用strcpy(t, st), strcpy(s1, s2), strcpy(s2, t)才能达到交换的目的。而且在main前面应该加上函数的声明void swap(char *s1, char *s2);如果你用int 类型,那么你应该返回一个值。
再说说一个致命错误,在main中,你用的是char *s1 = "abc",这样的变量存储在静态区,用strcpy改变是错误的,会引起程序崩溃,所以你要用字符数组去存储。别忘了加上#include <string.h>
最后,你上面程序的结果不是你想象的那样,结果是
abc
def
另外,我负责的告诉你,像这种方法:*t=*p1;*p1=*p2;*p2=*t; 是达不到你的效果的,因为*t,*p1,*p2都是首地址的内容,也就是第一个字符,所以这样做只能改变第一个字符,也就是最终是dbc,aef,不信你试一试。不过要避免程序崩溃,你必须在main里面改变一下:char *s1="abc";char *s2="bcd";这样做后,你试图改变s1和s2都是错误的,不能对它们改变,我已经说过了。
热心网友
时间:2023-10-19 16:52
你程序的输出:
abc
def
但这个结果并不是你想要的结果,应该使用二级指针,程序如下:
#include <stdio.h>
#include <stdlib.h>
void swap(char **ps1,char **ps2)
{
char *pt;
pt=*ps1;
*ps1=*ps2;
*ps2=pt;
return;
}
int main()
{
char *s1="abc",*s2="def";
swap(&s1,&s2);
puts(s1);
puts(s2);
getch();
return 0;
}
执行结果:
def
abc
热心网友
时间:2023-10-19 16:52
def
abc
main和swap函数应加上类型说明符void
swap函数将两个指针所指向的字符串调换
我在2005上调试的结果就是这样
但我觉得swap应改成这样:
void swap(char *p1,char *p2)
{
char t[10];
*t=*p1;*p1=*p2;*p2=*t;
}
热心网友
时间:2023-10-19 16:53
abc
def
如果你想让两个字符串换位置的话,只需把最后一行程序改为:
*t=*s1,*s1=*s2,*s2=*t
这样的话输出结果是:
def
abc
我也初学C语言,呵呵~~~!