gpt4 book ai didi

c - 从函数 C 返回填充的字符串数组

转载 作者:太空宇宙 更新时间:2023-11-03 23:55:08 26 4
gpt4 key购买 nike

第一次发帖,如有不便敬请谅解:

我正在写这样一个函数:

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]"
}

我的问题:我应该如何以安全一致的方式最好地做到这一点。专业人士如何做到这一点?


  1. 我不使用 malloc 因为:

    • 我不知道输入的参数数量或每个参数的长度(动态分配空间)。我想这就是我使用指针的原因
    • 因为我在主函数中声明了它,所以我认为 argCTempargVTemp 使用的指向/内存的指针会很好/保留在范围内,即使它们打开堆栈。
  2. 我知道当 myFunc 退出时它会使它创建的任何堆栈引用失效,所以这就是我从调用函数向它发送指针的原因。我应该使用指针和 malloc 之类的东西吗?

  3. 最后一件事:在 myfunc 退出之前,我检查了 argCTempargVTemp 的值,它们具有有效内容。我正在像这样设置 argCtempargVtemp:

    (*argCTemp) = argCount;
    (*argVTemp)[0] = "foo";

在函数退出之前它似乎工作得很好。由于我在内存中的其他地方设置指针,我很困惑为什么引用失败。我尝试在设置指针时使用 malloc INSIDE myFunc,当 myFunc 结束并被调用函数读取时,它仍然变成垃圾。

如果这让您感到困惑,我深表歉意,在此先感谢您的帮助。

最佳答案

因为“不知道我输入的参数数量或每个参数的长度”,您也可以使用 malloc。当你的缓冲区即将满时,你应该重新分配你的缓冲区。更好的方法:您不需要存储整个输入。一条线、一个 token 或一个 block 更好。只需设置一个静态数组来存储它们。如果您的输入超过 100 mb,哈希可能会更好。

对不起我的英语不好。

关于c - 从函数 C 返回填充的字符串数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9765343/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com