C 有没有办法获取数组的内容并将其存储到指针中?

C 有没有办法获取数组的内容并将其存储到指针中?,c,arrays,char,C,Arrays,Char,我正在编写一个程序,该程序产生与ls-l命令类似的结果。目前,我可以通过循环生成结果,但现在我想将某些变量存储到一个链表中,以便稍后通过词汇图形分类器将其放入。我可以将大部分变量正确地存储到节点中,但问题源于我试图存储权限变量时。有没有办法把char[]的内容转换成char* 按照我的设置方式,权限存储在char[]中,但我还没有找到使用char[]作为返回类型的方法,因此我决定使用char*更合适,但现在我正在尝试找出如何从char[]转换为char* char* find_perms(mod

我正在编写一个程序,该程序产生与ls-l命令类似的结果。目前,我可以通过循环生成结果,但现在我想将某些变量存储到一个链表中,以便稍后通过词汇图形分类器将其放入。我可以将大部分变量正确地存储到节点中,但问题源于我试图存储权限变量时。有没有办法把char[]的内容转换成char*

按照我的设置方式,权限存储在char[]中,但我还没有找到使用char[]作为返回类型的方法,因此我决定使用char*更合适,但现在我正在尝试找出如何从char[]转换为char*

char* find_perms(mode_t st) {
    char* perms_ptr;
    char perms[11];
    if(st && S_ISREG(st)) perms[0]='-';
    else if(st && S_ISDIR(st)) perms[0]='d';
    else if(st && S_ISFIFO(st)) perms[0]='|';
    else if(st && S_ISSOCK(st)) perms[0]='s';
    else if(st && S_ISCHR(st)) perms[0]='c';
    else if(st && S_ISBLK(st)) perms[0]='b';
    else perms[0]='l';  // S_ISLNK
    perms[1] = (st && S_IRUSR) ? 'r':'-';
    perms[2] = (st && S_IWUSR) ? 'w':'-';
    perms[3] = (st && S_IXUSR) ? 'x':'-';
    perms[4] = (st && S_IRGRP) ? 'r':'-';
    perms[5] = (st && S_IWGRP) ? 'w':'-';
    perms[6] = (st && S_IXGRP) ? 'x':'-';
    perms[7] = (st && S_IROTH) ? 'r':'-';
    perms[8] = (st && S_IWOTH) ? 'w':'-';
    perms[9] = (st && S_IXOTH) ? 'x':'-';
    perms[10] = '\0';
    printf("%s ",perms);
    perms_ptr = perms;
    return perms_ptr;
}

正如现在一样,它确实返回一个char*,但是它没有指向我希望以后可以使用的数组,而是指向一个空字符串。当我使用gdb查看perms_ptr指向的内容时,它显示为。

可以像char*一样访问char[]符号。它可以很容易地返回,但必须在函数内部动态分配,或者作为函数的参数传递

返回局部变量是一个错误,它会导致未定义的行为,因为它存储在堆栈中,并将在函数返回时被覆盖

在函数中,返回perms是可以的,如果使用 perms=malloc11


您必须将其释放到函数之外。

指针不能存储数据而不是地址,只能指向。请将您的烫发设置为静态字符数组。@Revolver请不要建议这样做,否则会导致其他问题,除非他们小心。请查看strdup。需要使用精确的语言。您永远不会将数组的内容存储在指针中。将指针指向数组。指针就是这样做的。他们指向事物。它们存储的是事物的地址,而不是内容。动态分配在这里可能是最好的,因为它允许在列表中处理和收集任意数量的文件权限。char[]不是char*。它在许多上下文中自动转换的事实并不能使它成为一个。不要教别人这些错误的信息。@EricPostchil我编辑了答案,以澄清我这句话的实际意义。看看是否更好。