C++ 在c+中实现压缩和解压+;。I';我对char*缓冲区感到困惑

C++ 在c+中实现压缩和解压+;。I';我对char*缓冲区感到困惑,c++,char,C++,Char,下面的两个函数即将实现zip和unzip,但是我在选择正确的类型缓冲区以保存文件中的字符串时遇到了问题 另外,对于声明为指向字符串line的指针的char*ptr=line,它会返回一个错误 解压功能也是同样的问题 错误:错误:无法在初始化中将'std::u cxx11::string'{aka'std::uu cxx11::basic_string'}转换为'char*' //zip函数 int main(int argc,char*argv[]) { 如果(argc==1){ 返回0; }

下面的两个函数即将实现zip和unzip,但是我在选择正确的类型缓冲区以保存文件中的字符串时遇到了问题

另外,对于声明为指向字符串
line
的指针的
char*ptr=line
,它会返回一个错误

解压功能也是同样的问题

错误:错误:无法在初始化中将'std::u cxx11::string'{aka'std::uu cxx11::basic_string'}转换为'char*'

//zip函数
int main(int argc,char*argv[])
{
如果(argc==1){
返回0;
}
弦线;
//字符*行=新字符[大小];
对于(int i=1;iCURR < P>这是一个问题,因为它试图设置一个<代码> char */COD>等于<代码> STD::String < /C> >,这不是一个允许的操作(因为<代码> STD::String 是C++对象,而不是原始字符数组):

您可能需要更像这样的设置,将
ptr
设置为指向
行的内部字符数组的开头:

const char *ptr = line.c_str();

(我在
ptr
类型中添加了
const
,因为您不允许写入
std::string
内部保存的字符数组)

如果输入文件包含任何数字、空格或控制字符(如换行符),这将严重失败…谢谢,这解决了字符*行问题,但当我编译并运行它时。测试文件包含aabbccdd,经过压缩和解压后,返回abc。@haonanwang然后您需要学习如何调试代码,以便查看其行为与预期的不同之处。请参阅
char *ptr = line;
const char *ptr = line.c_str();