十年网站开发经验 + 多家企业客户 + 靠谱的建站团队
量身定制 + 运营维护+专业推广+无忧售后,网站问题一站解决
把free(temp)注释就好了,str2指向temp内存,释放掉了,printf处自然报错,或者temp不申请内存,去掉free(temp)
我们提供的服务有:成都网站制作、成都网站设计、微信公众号开发、网站优化、网站认证、剑河ssl等。为上千企事业单位解决了网站和推广的问题。提供周到的售前咨询和贴心的售后服务,是有科学管理、有技术的剑河网站制作公司
先包含头文件“string.h”
然后直接调用库函数strcpy
具体操作:
交换str1和str2
先定义中间变量str3
strcpy(str3,str1);
strcpy(str1,str2);
strcpy(str2,str3);
利用strcpy()函数。
char a[10] = "abed", b[10] = "efg", t[10];
strcpy(t, a);//a复制给t
strcpy(a, b);//b复制给a
strcpy(b, t);//t复制给b
函数功能是字符串复制,将第一个参数指定的字符串复制到第二个参数指定的位置
两个参数都是字符串首地址。
使用strcpy需要 #includestring.h
不同的情况做法是不同的。
1. 如果是字符数组,char a[50]="String A"; char b[50]="String B"; 则
#includestdio.h
void strexchg(char *a, char *b){
char c;
while(*a *b){
c= *a; *a = *b; *b = c;
a++; b++;
}
c= *a; *a = *b; *b = c;
if(*a)
do *++a = *++b; while(*b);
else if(*b)
do *++b = *++a; while(*a);
}
int main(){
char a[50]="String A"; char b[50]="String B";
printf("Before Exchange :\n\tString A is \"%s\"\n\tString B is \"%s\"\n",a,b);
strexchg(a,b);
printf("After Exchange :\n\tString A is \"%s\"\n\tString B is \"%s\"\n",a,b);
return 0;
}
2 如果两个都是字符指针变量,char *a="String A"; char *b="String B"; 则
#includestdio.h
void strexchg(char **a, char **b){
char *c;
c=*a;
*a=*b;
*b=c;
}
int main(){
char *a="String A"; char *b="String B";
printf("Before Exchange :\n\tString A is \"%s\"\n\tString B is \"%s\"\n",a,b);
strexchg(a,b);
printf("After Exchange :\n\tString A is \"%s\"\n\tString B is \"%s\"\n",a,b);
return 0;
}
C语言中交换两个字符串需要借助strcpy函数或者使用自定义交换函数进行交换
如交换a,b数组中的字符串代码:
char a[10] = "abed", b[10] = "efg", t[10];strcpy(t, a);//a复制给tstrcpy(a, b);//b复制给astrcpy(b, t);//t复制给b
附:strcpy函数详情
原型声明:
char *strcpy(char* dest, const char *src);
头文件:
#include string.h 和 #include stdio.h
功能:把从src地址开始且含有NULL结束符的字符串复制到以dest开始的地址空间
说明:src和dest所指内存区域不可以重叠且dest必须有足够的空间来容纳src的字符串。返回指向dest的指针。
#include stdio.h
void swap(char *a, char *b){
int ch;
while(*a *b)
ch=*a,*a=*b,*b=ch,a++,b++;
if(*a){
*b++=*a,*a++='\0';
while(*b++=*a++);
}
else if(*b){
*a++=*b,*b++='\0';
while(*a++=*b++);
}
}