Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/134.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 尝试使用strcmp时出现字符转换错误_C++_Arrays_String_Strcmp - Fatal编程技术网

C++ 尝试使用strcmp时出现字符转换错误

C++ 尝试使用strcmp时出现字符转换错误,c++,arrays,string,strcmp,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; } 但是当我做这个检查时,我得到一个错误如下 C:\Users\U\Desktop\main.cpp [Error] invali

我有一个函数,可以剪切一个字符串并将其存储到一个新数组中

char splitStr(int cutPoint){
    int i=0;
    char newStr[20]="";
    for(i=0;i<cutPoint;i++){
        newStr[i]=comm[i];
    }
    cout<<newStr;
}
但是当我做这个检查时,我得到一个错误如下

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

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

三个问题将转化为四个:

  • 您询问的第一个问题和错误是,您将函数声明为返回单个
    char
    。不是像字符串那样指向
    字符的指针。更改为返回
    char*

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

  • 您从不在
    newStr
    中终止字符串。这意味着您将字符串传递给的所有C字符串函数都将超出边界,并且您将再次具有未定义的行为

  • 解决上述三个问题后,第四个问题是,将返回指向本地数组的指针
    newStr
    。一旦函数返回,该本地数组将超出作用域,留下一个指向不再存在的数据的指针

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

  • 使数组
    为静态
    。这意味着它的生命周期将是整个程序的生命周期,指向数组中数据的指针永远不会失效。不幸的是,这也将使函数不可重入,因此它永远不能在线程中使用或为不同的对象调用

  • 动态分配字符串并返回由
    new[]
    返回的指针(或首选的指针,而不是原始指针)。这里的问题是,当按您所展示的方式使用时,您将出现内存泄漏(如果您使用,将解决此问题)

  • 将字符串数组作为参数传递到函数中。返回该字符串

  • 在C++中处理字符串的最佳解决方案是:使用


  • 如果你使用它,那么你应该使用它,而不是自己制作。

    char
    const char*
    是完全不同的类型。
    C:\Users\U\Desktop\main.cpp [Error] invalid conversion from 'char' to 'const char*' [-fpermissive]