#include<iostream>
using namespace std;
void reverse(char *m) {
}
int main() {
string m="";
reverse(m);
return 0;
}
在我尝试通过字符指针访问字符串时,编译器给出以下错误
- cannot convert 'std::__cxx11::string {aka std::__cxx11::basic_string<char>}' to 'char*' for argument '1' to 'void reversewords(char*)'
有人可以告诉我它背后的原因吗?另外,请让我知道我可以通过指针访问字符串的方式。
std::string
和 char*
是独特的类型,不可互换。std::string
实施了一些隐式转换,可以将char*
转换为std::string
,但相反的不是正确的。
由于C 17,您可以使用std::string::data()
获取对字符串数据的非const指针。由于C 11,您还可以安全地获取std::string
中第一个字符的地址,并将其用作指向NULL终止字符串的指针。在C 11之前,似乎没有一种便携式方法来实现这一目标。
希望直接使用std::string
与标准容器算法一起使用,而不是使用为C字符串设计的功能。反向std::string
的通常方法是使用std::reverse
。
#include <algorithm>
#include <iostream>
#include <string>
int main()
{
std::string str = "Hello, World!";
std::reverse(str.begin(), str.end());
std::cout << str << std::endl; // Prints "!dlroW ,olleH"
}