尝试使用strcmp时出现char转换错误

时间:2017-06-03 15:57:16

标签: c++ arrays string strcmp

我有一个剪切字符串并将其存储到新数组的函数

char splitStr(int cutPoint){
    int i=0;
    char newStr[20]="";
    for(i=0;i<cutPoint;i++){
        newStr[i]=comm[i];
    }
    cout<<newStr;
}

数组comm[20]是一个全局数组。我拆分存储在此数组中的字符串,并使用strcmp()将其与其他字符串进行比较。我就是这样做的,

if(strcmp(splitStr(5),"print")==0){
        cout<<"yes";
}

但是当我进行此检查时,我收到如下错误,

C:\Users\U\Desktop\main.cpp [Error] invalid conversion from 'char' to 'const char*' [-fpermissive]

我该如何解决这个问题?造成这种情况的原因是什么?

1 个答案:

答案 0 :(得分:1)

三个问题,将变成四个:

  1. 您提出的第一个问题和错误是您声明函数返回char 。不是指向char的指针,就像字符串一样。更改为返回char*

  2. 您声明函数splitStr应该返回char(或char*一旦您解决了第一个问题),但您实际上并未返回任何内容。这将导致未定义的行为

  3. 您永远不会终止newStr中的字符串。这意味着您传递字符串的所有C字符串函数都将超出范围,并且您将再次未定义的行为

  4. 第四个问题,一旦修复了上述三个问题,就会返回指向本地数组newStr的指针。一旦函数返回,该局部数组将超出范围,留下指向不再存在的数据的指针。

  5. 这三个问题很容易解决。第四个问题更难。第四个问题有四种常见的解决方案:

    1. 制作数组static。这意味着它的生命周期将是整个程序,并且指向数组中数据的指针永远不会变为无效。不幸的是,这也会使函数不可重入,因此它永远不会在线程中使用或调用不同的对象。

    2. 动态分配字符串并返回new[]返回的指针(或std::unique_ptr,而不是原始指针)。这里的问题是,当你显示时使用,那么你将有一个内存泄漏(如果你使用std::unique_ptr将会解决)。

    3. 将字符串数组作为参数传递给函数。返回那个字符串。

    4. 在C ++中处理字符串时的最佳解决方案:使用std::string

    5. 如果你使用std::string,那么你应该使用substring function而不是自己编造。{/ p>