c - char的返回链 - C中的getgrouplist

标签 c arrays linux pointers char

我对返回的字符有疑问。我知道如果它是一个字符串,我必须分配内存并分配给选项卡。但它是一个字符。我不知道应该去哪一边:创建双数组 (char * tab[char 数][words 数]) 或尝试连接。函数必须返回字符链 (例如:[用户、root、sudo])。

这是我的功能:

char * groupsName(char *ut ){ //ut it's a user nick
struct group *gr;
int i;
struct passwd *pw;
gid_t *groups;
int ngroups=0;
char * tab= malloc ( sizeof (char) * ngroups)
        pw =getpwnam(ut);
        if(getgrouplist(ut, pw->pw_gid, groups, &ngroups)<0){
            groups=malloc(ngroups *sizeof(gid_t));
            getgrouplist(ut, pw->pw_gid, groups, &ngroups);

           for(i=0;i<ngroups;i++){
                gr=getgrgid(groups[i]);
                if(gr!= NULL)  tab[i] = gr->gr_name; 
            }
        return *tab;
        }   

}

最佳答案

tab 是一个字符数组。如果你想要一个字符串数组(一个字符数组的数组),如 ["user", "root", "sudo"],你可以使用一个

char **tab = (char **) malloc(sizeof(char *) * ngroups));

另请注意,malloc 现在使用 sizeof(char *) 而不是 sizeof(char)。

然后是:

tab[i] = gr->gr_name;    

我假设 gr_name 是一个指向组名的指针,并且在函数之后仍然可以访问。

现在我可能理解错了你的问题,因为它不是很清楚。 无论哪种方式,如果您返回 tab,您想要返回指向它的指针而不是取消引用它:

return tab;

如果您返回*tab,您将返回tab指向的第一个字符。

关于c - char的返回链 - C中的getgrouplist,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55071263/

相关文章:

python - 两个 numpy 数组中所有行的组合

非 root 用户无法读取在 linux 上具有文件写入/输出的 JAVA 应用程序

c - 整数 k = k;该声明如何以及为何起作用?

c - GCC 和 Clang 解析器真的是手写的吗?

c++ - 在 C++ 中对列(数组)的平均值进行排序和打印

arrays - 根据同一表中的两个键获取记录数组

linux - 如何在 Linux 流量控制 (tc) 中通过 ematch 排除端口范围?

linux - 可以运行同一可执行文件的多个实例吗?

c - 如何在链表中插入多条数据

c - 我需要有关 C 中 getFileExt() 的帮助