首页 > 解决方案 > C void函数修改指针数组

问题描述

我有一个 tokenize 函数,我想通过该函数修改一个 char 指针数组。但是经过多次尝试后我没有得到结果。有人可以帮助我吗?

下面是代码:

void **tokenize(char **argv, char *line, int *numTokens, char *delimiter)
{
    int argc = 0;
    char *token = strtok(line, delimiter);
    while (token != NULL)
    {
        argv[argc++] = token;
        token = strtok(NULL, delimiter);
    }
    argv[argc++] = NULL;
    *numTokens = argc - 1;
}

void process_cmd(char *cmdline){
    char *temp[20];
    int *num2;

    tokenize(temp, cmdline, num2, "|"); 

    printf("%s\n", temp[0]);
    printf("%s\n", temp[1]);
    printf("%d\n", *num2);

}

标签: c

解决方案


在您的process_cmd函数中,局部变量num2在定义时未初始化,您直接在调用tokenize. numTokens然后您写入in指向的位置tokenize,这会导致未定义的行为。在大多数情况下,您的程序在尝试写入时会崩溃numTokens;但理论上任何事情都可能发生。

要解决此问题,您需要将定义更改num2为:

int num2;

并调用tokenize如下:

tokenize(temp, cmdline, &num2, "|"); 

推荐阅读