c++ - 在CPP中转换char数组中的字符串
问题描述
我正在做一个项目,我被困了一段时间。我必须将 char 数组传递给“write”函数。我尝试使用将“data”curenty 字符串转换为 char 数组,https://www.techiedelight.com/convert-std-string-char-cpp/
但我只得到错误
error: request for member ‘c_str’ in ‘data’, which is of pointer type ‘const string*’ {aka ‘const std::__cxx11::basic_string<char>*’} (maybe you meant to use ‘->’ ?)
char* c[] = const_cast<char*>(data.c_str());
void LCD::print(const std::string* data)
{
for (int i = 0; i < strlen(data); i++)
write(data[i]);
}
解决方案
const std::string*
std::string
将指针传递给函数几乎不是一个好主意。我建议不要做这样的事情。如何更换它取决于您的意图。如果您要传递单个字符串,则对 const 的引用是典型的默认选择。
strlen(data)
该strlen
函数不接受 type 的参数const std::string*
。这个程序格式不正确。
如果你想要 a 的长度std::string
,你可以使用size
成员函数。
write(data[i]);
在这里,您使用下标运算符来访问i
th指向的对象std::string
数组中的对象。std::string
data
strlen
用法和描述暗示只涉及一个与此数组迭代相矛盾的字符串。
error: request for member ‘c_str’ in ‘data’, which is of pointer type ‘const string*’ {aka ‘const std::__cxx11::basic_string<char>*’} (maybe you meant to use ‘->’ ?) char* c[] = const_cast<char*>(data.c_str());
错误消息解释了您做错了什么。data
是一个指针。指针没有成员函数。您试图调用c_str
不存在的指针的成员函数。
该错误消息还建议了可能的解决方案。如果您通过指针间接(使用间接成员访问运算符->
)访问指向的字符串,那么您将访问该c_str
字符串的成员函数。std::string
确实有这样的成员函数。
引用的代码中还有另一个错误。您正在尝试使用返回的指针来初始化指针数组c
。那是不可能的。只有一个指针返回,在这种情况下创建一个元素的数组没有多大意义。
我必须将一个字符数组传递给“写”函数
我怀疑您实际上的意思是,您必须将指针传递给空终止字符数组的第一个元素。可以这样做:
std::string data = ...;
write(data.c_str());
它是如此微不足道,我不建议为此目的编写函数。
推荐阅读
- python - 我应该使用 numpy 的随机生成器吗?
- c# - Blazor Web API 响应处理
- javascript - 为什么 setState 不改变本地状态?
- bash - bash 循环错误:使用 jq / bash 按属性获取 JSON 对象
- latex - MathJax 中的删除线
- database - 如何计算重做日志大小?
- postgresql - 如何将格式错误的 csv 文件导入 postgresql 表
- internet-explorer - webdriver 在 .get (IE) 上挂起一些 url
- python - Pi 上非常简单的 HTTP 服务器
- javascript - Vuetify 2 骨架加载器,在 Vuex 商店中操作“加载”