【问题标题】:changing value from function从函数改变值
【发布时间】:2011-05-02 04:30:02
【问题描述】:

我想在函数中更改一个 2dim 字符数组。

我像这样分配空间

char **u;
u = new char * [ MAX_DEPTH ];
for (i=0; i<MAX_DEPTH; i++)
    u[ i ] = new char [ BUFFER_SIZE ];

函数看起来像

rem(char ***arr, int max_length, char *url)
{
    int idx=0;
    char * p;
    int i;

    p = strtok (url,"/"); 

    while (p != NULL && idx < max_length)
    {

        for (  i=0; i<maxUrlSize-1 && p[i] != '\0'; i++)
            (*arr)[idx][i] = p[i];
        for (     ; i< maxUrlSize-1; i++)
            (*arr)[idx][i] = '\0';
    }
}

该函数将在我的主程序中使用。

rem( &u, MAX_LEN, url);

但是离开函数后,里面什么都没有。有人能解释一下如何以这种方式使用指针吗?

【问题讨论】:

  • 没有什么明显的错误,但多于 1 行的片段确实有帮助 - 我们必须推断函数实现是 rem(char ***tmp, int ?) 代码甚至开始有意义。
  • 你贴的代码都是正确的。
  • 从函数来看,这段代码看起来绝对没问题。您能否提供有关如何从程序的其他部分调用此方法的代码。
  • @Roby:请编辑并对齐您的代码。一位成员第一次为你做这件事时付出了很大的努力,你应该从那里学习......不能让你的编辑无限循环然后反编辑以使其可读。
  • 没有看到rem 中的实际代码,您所拥有的看起来还不错。但是,除非您在函数rem 内重新分配分配给u 的空间,否则您实际上不需要在此处传递&amp;u。只需传递 u 即可。接收参数tmp 应该只是char **,您可以使用tmp[i][j] 访问它。编辑评论:tmp 是什么?看起来像一个全球性的。

标签: c++ c function pointers


【解决方案1】:

您需要将函数中对tmp 的引用更改为arr。您根本没有访问参数arr。此外,这里不需要char ***,因为您不会更改分配给u 的空间。相反,您应该有参数char **arr,您可以以arr[i][j] 访问它。然后你应该将u 传递给rem,而不是&amp;u

【讨论】:

  • 你是对的,我删除了几行代码并将其粘贴在一起... tmp 是 arr ... 对不起,使用了错误的名称:-/
猜你喜欢
  • 1970-01-01
  • 2018-03-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-01-30
  • 1970-01-01
相关资源
最近更新 更多