为什么 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
您正在按值传递指针,因此修改了它们的副本,而不是原始 str1
和 str2
。
您可以修改 swap
的签名以将指针传递给指针,然后通过取消引用来修改其值:
void swap(char** str1, char** str2)
{
char* temp = *str1;
*str1 = *str2;
*str2 = temp;
}
和
char* str1 = "geeks";
char* str2 = "forgeeks";
swap(&str1, &str2);
我尝试使用指针交换字符串,但我不知道为什么这不能交换字符串?
所以谁能解释一下为什么会这样并纠正它?
#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
您正在按值传递指针,因此修改了它们的副本,而不是原始 str1
和 str2
。
您可以修改 swap
的签名以将指针传递给指针,然后通过取消引用来修改其值:
void swap(char** str1, char** str2)
{
char* temp = *str1;
*str1 = *str2;
*str2 = temp;
}
和
char* str1 = "geeks";
char* str2 = "forgeeks";
swap(&str1, &str2);