我正在编写一个程序,该程序产生与命令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指向的内容时,它只是显示为“”。
答案 0 :(得分:1)
可以完全像char *一样访问char []符号。它可以很容易地返回,但是必须在函数内部动态分配,或者以其他方式作为函数的参数传递。
返回局部变量是导致未定义行为的错误,因为它存储在堆栈中,并且一旦功能返回将被覆盖。
在函数中返回perms
是可以的(不需要定义另一个指针),如果您使用
perms = malloc (11);
(您必须在功能之外释放它)。