在要在 main 中使用的函数内初始化字符指针数组

Initialise array of character pointers inside a function to be used in main

如何在函数内初始化字符指针数组。应该注意的是,长度是动态地来自函数内部的其他计算。我在 main() 中找不到长度。为简单起见,我使用 rand() 来解释场景。

有什么方法可以初始化具有一定长度的字符指针数组,而不会将长度从 main() 传递到 setArgs()

使用以下代码我得到错误:

temp.c:8:6: error: invalid use of array with unspecified bounds 8 | args[length];

#include<stdio.h>
#include<stdlib.h>

void setArgs(char* (*args)[])
{
    int length = (rand() % 5) + 2;

    args[length];
    args[0]="hello[=10=]";
    args[1]="jack[=10=]";
}
int main()
{
    char* myArgs[]={NULL};
        
    setArgs(&myArgs);

    for(int i=0;i<2;i++)
    {
        printf("%s", myArgs[i]);
    }

    return 0;
}

你有两个选择。动态分配内存或先生成长度:

1.

#include<stdio.h>
#include<stdlib.h>

void setArgs(char *** args)
{
    int length = (rand() % 5) + 2;
    *args = malloc(sizeof(char *)*length);

    (*args)[0]="hello[=10=]";
    (*args)[1]="jack[=10=]";
}
int main()
{
    char ** myArgs = NULL;       
    setArgs(&myArgs);

    for(int i=0;i<2;i++)
    {
        printf("%s", myArgs[i]);
    }
    free(myArgs);
    return 0;
}

或 2.


#include<stdio.h>
#include<stdlib.h>

void setArgs(char ** args)
{
    args[0]="hello[=11=]";
    args[1]="jack[=11=]";
}
int main()
{
    int length = (rand() % 5) + 2;
    char* myArgs[length];
        
    setArgs(myArgs);

    for(int i=0;i<2;i++)
    {
        printf("%s", myArgs[i]);
    }
    return 0;
}

args[length]; 不会改变长度,只是在索引 length

处做一个 array-access

这是一种方法:

#include<stdio.h>
#include<stdlib.h>

 char **setArgs()
 {
    int length = (rand() % 5) + 2;

    char **args;

    args = malloc(length*(sizeof(char*)));

    args[0]="hello[=10=]";
    args[1]="jack[=10=]";

    return args;
}

int main()
{
    char** myArgs;
    
    myArgs = setArgs();

    for(int i=0;i<2;i++)
    {
        printf("%s", myArgs[i]);
    }

    return 0;
}