使用指针交换c中的字符串

使用指针交换c中的字符串,c,string,pointers,char,C,String,Pointers,Char,需要帮助吗 这是我的密码 void swapstringfun() { int i=0,j=0; char *str=(char *)malloc(sizeof(char)*15); char *mystr=(char *)malloc(sizeof(char)*15); system("cls"); printf("Please enter first string :\t"); scanf("%s",str); printf("Please ente

需要帮助吗

这是我的密码

void swapstringfun()
{
   int i=0,j=0;
   char *str=(char *)malloc(sizeof(char)*15);
   char *mystr=(char *)malloc(sizeof(char)*15);
   system("cls");
   printf("Please enter first string :\t");
   scanf("%s",str);
   printf("Please enter second string :\t");
   scanf("%s",mystr);
   while(*(str+i)!='\0' && *(mystr+i)!='\0')
   {
     *(str+i) ^=*(mystr+i);
     *(mystr+i) ^=*(str+i);
     *(str+i) ^=*(mystr+i);
     i++;
   }
   printf("%s swapped to %s",str,mystr);
   getch();
   main();
}
我编写了上面的代码,使用XOR运算符交换字符串。这段代码的问题是。当我的输入为RAJESHASHISH。然后,它显示输出ASHISHRAJESH。这是意料之中的


但是,当输入是让说ABHISHEKCODER。然后,输出是CODERHEKABHIS。但是,预期的输出是编码器阿披舍克。有人帮我解决这个问题吗。我将不胜感激。

您迭代并交换,直到到达较短字符串的末尾

while(*(str+i)!='\0' && *(mystr+i)!='\0')
(或两者,如果长度相等)。要迭代到较长字符串的末尾,需要使用
|
而不是
&&
,并确保1。两个指针都指向足够大的内存块,以及2。较短的字符串以足够的0字节结尾。所以你应该
calloc
内存,而不是
malloc

但是,你应该交换指针,真的

char *tmp = str;
str = mystr;
mystr = tmp;

您还需要交换终止的0,作为它在C中被称为字符串的一部分


0是字符数组中的stopper元素,用于描述字符串。

您需要对两个字符串的整个长度进行异或运算。因为在第二个示例中,字符串的长度不同,所以您的算法无法工作

这是您必须重新考虑的声明:

while(*(str+i)!='\0' && *(mystr+i)!='\0')

@但是,正如粗体文字所示,这是危险的。明白了。我将介绍
malloc
calloc
的概念。我的意思是,它们的差异和用法。请正确缩进代码。使用xor交换两个值是一种相当愚蠢的方式。使用临时变量既安全又快速。