让我们考虑以下程序。
#include
void swap(char *str1, char *str2)
{
char *temp = str1;
str1 = str2;
str2 = temp;
}
int main()
{
char *str1 = "geeks";
char *str2 = "forgeeks";
swap(str1, str2);
printf("str1 is %s, str2 is %s", str1, str2);
getchar();
return 0;
}
程序的输出是str1是geeks,str2是forgeeks 。因此,上面的swap()函数不会交换字符串。该函数仅更改局部指针变量,而更改不会反映在函数外部。
让我们看看交换字符串的正确方法:
方法1(交换指针)
如果对字符串(不是数组)使用字符指针,则更改str1和str2以指向彼此的数据。即交换指针。在函数,如果我们要更改指针(显然,我们希望更改反映在函数外部),则需要将指针传递给该指针。
#include
/* Swaps strings by swapping pointers */
void swap1(char **str1_ptr, char **str2_ptr)
{
char *temp = *str1_ptr;
*str1_ptr = *str2_ptr;
*str2_ptr = temp;
}
int main()
{
char *str1 = "geeks";
char *str2 = "forgeeks";
swap1(&str1, &str2);
printf("str1 is %s, str2 is %s", str1, str2);
getchar();
return 0;
}
如果使用字符数组存储字符串,则无法应用此方法。
方法2(交换数据)
如果使用字符数组存储字符串,则首选方法是交换两个数组的数据。
#include
#include
#include
/* Swaps strings by swapping data*/
void swap2(char *str1, char *str2)
{
char *temp = (char *)malloc((strlen(str1) + 1) * sizeof(char));
strcpy(temp, str1);
strcpy(str1, str2);
strcpy(str2, temp);
free(temp);
}
int main()
{
char str1[10] = "geeks";
char str2[10] = "forgeeks";
swap2(str1, str2);
printf("str1 is %s, str2 is %s", str1, str2);
getchar();
return 0;
}
此方法不能应用于存储在只读内存块中的字符串。
想要从精选的最佳视频中学习和练习问题,请查看《基础知识到高级C的C基础课程》。