我有一个剪切字符串并将其存储到新数组的函数
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]
我该如何解决这个问题?造成这种情况的原因是什么?
答案 0 :(得分:1)
三个问题,将变成四个:
您提出的第一个问题和错误是您声明函数返回单char
。不是指向char
的指针,就像字符串一样。更改为返回char*
。
您声明函数splitStr
应该返回char
(或char*
一旦您解决了第一个问题),但您实际上并未返回任何内容。这将导致未定义的行为。
您永远不会终止newStr
中的字符串。这意味着您传递字符串的所有C字符串函数都将超出范围,并且您将再次未定义的行为。
第四个问题,一旦修复了上述三个问题,就会返回指向本地数组newStr
的指针。一旦函数返回,该局部数组将超出范围,留下指向不再存在的数据的指针。
这三个问题很容易解决。第四个问题更难。第四个问题有四种常见的解决方案:
制作数组static
。这意味着它的生命周期将是整个程序,并且指向数组中数据的指针永远不会变为无效。不幸的是,这也会使函数不可重入,因此它永远不会在线程中使用或调用不同的对象。
动态分配字符串并返回new[]
返回的指针(或std::unique_ptr
,而不是原始指针)。这里的问题是,当你显示时使用,那么你将有一个内存泄漏(如果你使用std::unique_ptr
将会解决)。
将字符串数组作为参数传递给函数。返回那个字符串。
在C ++中处理字符串时的最佳解决方案:使用std::string
!
如果你使用std::string
,那么你应该使用substring function而不是自己编造。{/ p>