让我们考虑以下程序。
#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()函数不会交换字符串。该函数仅更改局部指针变量,而更改不会反映在函数外部。
![c99b0fb71281df19d625ff8a7cb1b271.png](https://i-blog.csdnimg.cn/blog_migrate/9a9a2e9c8262078aabf919eadb0373a7.jpeg)
让我们看看交换字符串的正确方法:
方法1(交换指针)
如果对字符串(不是数组)使用字符指针,则将str1和str2更改为指向彼此的数据。即交换指针。在函数中,如果要更改指针(显然,我们希望更改反映在函数外部),则需要将指针传递给指针。
#include 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 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; }
此方法不能应用于存储在只读内存块中的字符串。