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