我一直试图为函数返回一个字符串数组几天无济于事。当我在StackOverflow周围搜索时,我发现有一个参数将被分配一个数组的值是一个更好的主意。所以,这是我的代码示例(不是实际用法,而是我试图使用该函数的模型)。如果代码有点草率,我很抱歉。我已经用它测试了一段时间了。
void splitOn(string message, string delim, string***toCh) {
string** rString = new string*;
string lArr[numberOf(message, delim)+1];
for(int index=0; index<numberOf(message, delim)+2; index++) {
lArr[index]=message.substr(0, message.find(delim)).c_str();
message = message.substr(message.find(delim)+1, message.length());
rString[index]=&lArr[index];
cout << "IN LOOP "<<*rString[index]<<endl;
}
rString[numberOf(message, string(delim))] = &message;
toCh=&rString;
}
int main(){
string***arr;
splitOn("fox.over.lazy.dog", ".", arr);
cout << **arr[0]<<endl;
注意:
numberOf()接受一个字符串和一个分隔符(字符串),并返回在字符串中找到分隔符的次数。
字符串来自std :: string
lArr(循环中的局部数组)和* rString都提供正确的输出。
虽然我尝试将数组分配给参数,但学习如何返回数组对我来说更具吸引力。
我可以将它与文件和getLine()一起破解,但我更愿意学习如何正确地执行此操作。
答案 0 :(得分:0)
您正在尝试返回本地变量,这些变量永远不会有效。您和您的调用者需要就如何分配返回值达成一致。在C ++中,评论者提到这通常是通过传递一个向量来处理你的分配来完成的。
在C中你有两个选项,你可以让调用者传入足够大的分配,或者在被调用者中使用多次调用malloc(不要忘记调用者中的free调用!)
例如,如果传递可写字符数组,则只需使用空字符覆盖分隔符,即可将其拆分为单个字符串,而无需分配新副本。