我正试图用下面的方法在C++中交换两个字符串。我将它们作为参数传入,在方法本身中,它们似乎可以正确地交换。然而,当我在调用swap方法后输出字符串时,它们并没有改变。知道为什么吗?非常感谢您的帮助!
void swap(char* stringA, char* stringB){
char temp[100];
for (int i = 0; i < 100; ++i){
temp[i] = stringA[i];
}
stringA = stringB;
stringB = temp;
}
int main() {
char *greeting = "Hello";
char *dismissal = "Good Bye";
swap(greeting, dismissal);
printf("greeting: %s dismissal: %sn", greeting, dismissal);
return 0;
}
输出:
greeting: Hello dismissal: Good Bye
您只修改swap
函数中指针的副本。如果要更改调用站点上的指针,则需要通过引用传递它们。此外,您将字符串的内容视为包含100个元素,但它们没有,因此在这些位置进行索引时,您将调用未定义的行为。
你可以简单地写这样的函数:
void swap(char const * &stringA, char const* &stringB) {
auto temp = stringA;
stringA = stringB;
stringB = temp;
}
或者直接使用CCD_ 2。
此外,在c++11中,不能将字符串文字分配给char *
,需要将其分配给char const *
。
这是一个演示。