为什么 C 中的这个字符串交换函数不交换字符串?

why is this string swap function in C not swap the strings?

我尝试使用指针交换字符串,但我不知道为什么这不能交换字符串?

所以谁能解释一下为什么会这样并纠正它?

#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 is geeks, str2 is forgeeks

您正在按值传递指针,因此修改了它们的副本,而不是原始 str1str2

您可以修改 swap 的签名以将指针传递给指针,然后通过取消引用来修改其值:

void swap(char** str1, char** str2) 
{ 
  char* temp = *str1; 
  *str1 = *str2; 
  *str2 = temp; 
} 

char* str1 = "geeks"; 
char* str2 = "forgeeks"; 
swap(&str1, &str2);