如题所述
长度不同,两者存放单元的个数应当都大于 最长的字符串,否则交换以后 存不下,会出错。
#include <stdio.h>
#include <stdlib.h>
void jh(char *p1, char *p2){
char *t;
int i,L;
L = strlen(p1);
if (strlen(p2) > L) L = strlen(p2);
t = (char *) malloc(sizeof(char) * L);
strcpy(t,p1);strcpy(p1,p2);strcpy(p2,t); // 交换
}
main(){
char s1[100]="abc", s2[100]="1234567"; // 实际允许存放量必需足够大
printf("%s %s \n",s1,s2);
jh(s1,s2);
printf("%s %s \n",s1,s2);
return 0;
}
#include <stdio.h>
#include <stdlib.h>
void jh(char *p1, char *p2){
char *t;
int i,L;
L = strlen(p1);
if (strlen(p2) > L) L = strlen(p2);
t = (char *) malloc(sizeof(char) * L);
strcpy(t,p1);strcpy(p1,p2);strcpy(p2,t); // 交换
}
main(){
char s1[100]="abc", s2[100]="1234567"; // 实际允许存放量必需足够大
printf("%s %s \n",s1,s2);
jh(s1,s2);
printf("%s %s \n",s1,s2);
return 0;
}
温馨提示:答案为网友推荐,仅供参考
第1个回答 2012-07-10
void swapStr(char *str1, char *str2) //交换str1 和str2指向的字符串
{
char *p1,*p2,c;
while(*p1 != '\0' && *p2 !='\0'){
c=*p1;
*p1=*p2;
*p2=c;
p1++;
p2++
}
if(*p1=='\0'){
if(*p2 =='\0')return;
c=*p2;
*p2++='\0';
*p1++=c;
while(*p2 !='\0'){*p1=*p2; p1++; p2++;}
*p1='\0';
}
else {
c=*p1;
*p1++='\0';
*p2++=c;
while(*p1 !='\0'){*p2=*p1; p1++; p2++;}
*p2='\0';
}
}追问
{
char *p1,*p2,c;
while(*p1 != '\0' && *p2 !='\0'){
c=*p1;
*p1=*p2;
*p2=c;
p1++;
p2++
}
if(*p1=='\0'){
if(*p2 =='\0')return;
c=*p2;
*p2++='\0';
*p1++=c;
while(*p2 !='\0'){*p1=*p2; p1++; p2++;}
*p1='\0';
}
else {
c=*p1;
*p1++='\0';
*p2++=c;
while(*p1 !='\0'){*p2=*p1; p1++; p2++;}
*p2='\0';
}
}追问
长度不同啊!1
追答是不同啊,把剩下的COPY过去就行了嘛。