交换两个字符串的内容,错哪儿了???
代码如下:
#include<stdio.h>
void swap(char **x,char **y);
int main()
{
char str1[]="GG";
char str2[]="KK";
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);
return 0;
}
void swap(char **x,char **y)
{
char **temp = NULL;
*temp=*x;
*x=*y;
*y=*temp;
}
编译没错,运行出错,求原因?? C 字符串 交换
[解决办法]
void swap(char **x,char **y)
{
char **temp = NULL;
*temp=*x;//temp是空指针,对*temp赋值是错误的。
*x=*y;
*y=*temp;
}
改为:
void swap(char **x,char **y)
{
char *temp = NULL;//是否“=NULL”无影响。
temp=*x;
*x=*y;
*y=temp;
}
[解决办法]
字符串赋值要用strcpy:
#include<string.h>
#include<stdlib.h>
#include<stdio.h>
void swap(char **x,char **y);
int main()
{
char str1[]="GG";
char str2[]="KK";
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);
return 0;
}
void swap(char **x,char **y)
{
char* temp = (char*)malloc(strlen(*x) + 1);
strcpy(temp, *x);
strcpy(*x,*y);
strcpy(*y,temp);
free(temp);
}
[解决办法]
你再分析char**类型的temp时,应该先把char *看成一个单独的类型,这样就很清楚了:
int * pi = NULL;
* pi = 5;//错误,pi是空指针,不能对*pi赋值.
typedef char * pchar;
pchar * ppchar1 = NULL;
* ppchar1 = "abc";//错误,ppchar1是空指针,不能对*ppchar1赋值。
char ** ppchar2 = NULL;
* ppchar2 = "abc";//错误,同上。
[解决办法]
原因就是你要交换的是字符串的内容,而不是字符串的地址,仔细看每行代码,自然可以领悟。
字符串赋值要用strcpy:
#include<string.h>
#include<stdlib.h>
#include<stdio.h>
void swap(char **x,char **y);
int main()
{
char str1[]="GG";
char str2[]="KK";
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);
return 0;
}
void swap(char **x,char **y)
{
char* temp = (char*)malloc(strlen(*x) + 1);
strcpy(temp, *x);
strcpy(*x,*y);
strcpy(*y,temp);
free(temp);
}
代码如下:
#include<stdio.h>
void swap(char **x,char **y);
int main()
{
char str1[]="GG";
char str2[]="KK";
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);
return 0;
}
void swap(char **x,char **y)
{
char **temp = NULL;
*temp=*x;
*x=*y;
*y=*temp;
}
编译没错,运行出错,求原因??
求楼上问题的原因?谢大婶
嗯,我的确要交换两个字符数组的内容。
但是字符数组的内容是由两个字符数组头指针指向的
那么,我只需交换两个字符数组头指针,就可以达到交换数组元素的同样效果,而且这样效率会更高!
问题是,这样实现会有其他问题吗?
你的想法是想把两个指针的值交换下,然后就达到你的预期了。这是可行的,交换两个指针的指向,间接的达到交换字符串的目的