这是第一次发帖,如有任何困惑,我深表歉意:
我正在编写这样的函数:
int myFunc(char* inputStr, int *argCTemp, char** argVTemp[]);
我的函数的目的是获取输入字符串(基本上是任何用户输入)的副本,然后用于strtok
将其转换为令牌并通过数组指针 ( argV
) 填充数组。完成myFunc
后,希望我的字符串中有参数计数和字符串数组inputStr
。
这是我如何称呼它的示例:
int main(int argc, char** argv[])
{
int argCTemp = -1;
char** argVTemp;
// 1 Do Stuff
// 2 Get input string from user
// 3 then call myfunc like this:
myFunc(inputStr, &argCTemp, &argVTemp);
// 4: I get garbage whenever I try to use "argVTemp[i]"
}
我的问题:我应该如何以安全和一致的方式最好地做到这一点。专业人士如何做到这一点?
我不使用
malloc
,因为:- 我不知道输入的参数数量或每个参数的长度(动态分配空间)。我想这就是我使用指针的原因
- 因为我在主函数中声明了它,所以我认为指向/内存的指针和使用的指针
argCTemp
会argVTemp
很好/保持在范围内,即使它们在堆栈上。
我知道
myFunc
退出时它会使它创建的任何堆栈引用无效,所以这就是我从调用函数向它发送指针的原因。我应该使用指针等等malloc
还是什么?最后一件事:在
myfunc
退出之前,我检查了 and 的值,argCTemp
它们argVTemp
有有效的内容。我正在设置argCtemp
,argVtemp
就像这样:(*argCTemp) = argCount; (*argVTemp)[0] = "foo";
在函数退出之前,它似乎工作得很好。由于我在内存中的其他位置设置指针,我很困惑为什么引用失败。我在设置指针时尝试使用malloc
INSIDE myFunc
,但它在结束时仍然变成垃圾myFunc
并被调用函数读取。