C返回字符串数组

Jus*_*t94 2 c arrays

我希望这个程序返回一个数组,然后是一个来自main的变量来从函数中获取这个数组,并且可以在一部分代码中使用,该代码必须根据初始变量中的这些值来验证字符串.但是变量没有得到返回的数组.我看过一些帖子说你不能在C中返回数组,但我也看过其他帖子,这是可能的.

但是我想知道如何捕获这个返回值.

int getUsers()
{
    char userVect[5][25];
    char user[24];
    int i = 0, j = 0, k;

    FILE  *usernames;
    usernames = fopen("usernames.cfg", "r");
    if (usernames == NULL){
        perror("usernames - err");
        return(-1);
    }

    while(fgets(user, sizeof(user), usernames) !=NULL){
        strcpy(userVect[j], user);
        j++;
    }

    fclose(usernames);
    for(k=0; k<j; k++)
        printf("Usernames are:  %s\n", userVect[k]);

    return userVect;
}

int main()
{
    printf("\nWelcome to Sys v1.24. To start off, please insert your command. \n");
    char *users;
    users = getUsers();
    printf("%c\n", users);

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

ame*_*yCU 6

1.你想要return一个字符串,你的函数的类型是int

我看到你返回一个2-d数组,然后你的函数应该是类型char **-

char **getUser(void)
Run Code Online (Sandbox Code Playgroud)

2.userVect从函数返回局部变量().您无法在功能块外部访问它.

你应该在你的功能中做到这一点getUser-

char **userVect;
userVect=malloc(5*sizeof(char **));              //allocate memory  
for(int i=0;i<5;i++)
   userVect[i]=malloc(25*sizeof(char));   
Run Code Online (Sandbox Code Playgroud)

main做到这一点 -

char **user;
...
user=getUsers();                 // call function 
Run Code Online (Sandbox Code Playgroud)

3.并打印usermain-

for(int i=0;i<5;i++)
    printf("%s\n", user[i]);          //this is wrong in your code- printf("%c\n", users);
Run Code Online (Sandbox Code Playgroud)

然后free它在main那时结束 -

for(int i=0;i<5;i++)
    free(user[i]);
free(user);
Run Code Online (Sandbox Code Playgroud)