如何解决从参数列表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: %s\n",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;
}
或直接使用std::swap
。
另外,从c ++ 11开始,您不能将字符串文字分配给char *
,需要将其分配给char const *
。
这里是demo。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。