让我们考虑下面的程序。
null
#include<stdio.h> 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是极客,str2是伪造者 .所以上面的swap()函数不交换字符串。函数只更改本地指针变量,而这些更改不会反映在函数外部。
让我们看看交换字符串的正确方法:
方法1(交换指针) 如果你是 对字符串使用字符指针 (不是数组)然后更改str1和str2以指向彼此的数据。i、 例如,交换指针。在一个函数中,如果我们想要改变一个指针(显然,我们想要改变在函数之外被反映出来),那么我们需要传递一个指向指针的指针。
#include<stdio.h> /* 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<stdio.h> #include<string.h> #include<stdlib.h> /* 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; } |
此方法不能应用于存储在只读内存块中的字符串。
如果您发现上述文章中有任何不正确之处,或者您想分享有关上述主题的更多信息,请发表评论。
© 版权声明
文章版权归作者所有,未经允许请勿转载。
THE END