交换参数列表C++中的两个字符串



我正试图用下面的方法在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 *

这是一个演示。

最新更新