首页 > 解决方案 > 在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]);
}

标签: c++arraysi2c

解决方案


const std::string*

std::string将指针传递给函数几乎不是一个好主意。我建议不要做这样的事情。如何更换它取决于您的意图。如果您要传递单个字符串,则对 const 的引用是典型的默认选择。

strlen(data)

strlen函数不接受 type 的参数const std::string*。这个程序格式不正确。

如果你想要 a 的长度std::string,你可以使用size成员函数。

write(data[i]);

在这里,您使用下标运算符来访问ith指向的对象std::string数组中的对象。std::stringdata

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());

它是如此微不足道,我不建议为此目的编写函数。


推荐阅读