QQ登录

只需一步,快速开始

 找回密码
 注册

QQ登录

只需一步,快速开始

楼主: x888888

makefile出错求助

[复制链接]
 楼主| 发表于 2004-7-25 15:56:24 | 显示全部楼层
char *get_perms(struct stat *sbuf,char *perms)
{
static char *modes[]={"---","--x","-w-","r--","r-x","rw-","rwx"};/* */
int i,j;
*perms='\0';
/* */
for(i=2;i>=0;i--){
j=(sbuf->st_mode>>(i*3))&07;
strcat(perms,modes[j]);
}

if((sbuf->st_mode &S_ISUID)!=0)
perms[2]='s';
if((sbuf->st_mode &S_ISGID)!=0)
perms[5]='s';
if((sbuf->st_mode &S_ISUID)!=0)
perms[8]='t';
return perms;
}
回复

使用道具 举报

发表于 2004-7-25 15:56:29 | 显示全部楼层
[quote:da609facfb="x888888"]请问这句应该如何解释?[/quote]哪句?
回复

使用道具 举报

 楼主| 发表于 2004-7-25 16:02:44 | 显示全部楼层
j=(sbuf->st_mode>>(i*3))&07;
回复

使用道具 举报

发表于 2004-7-25 16:09:39 | 显示全部楼层
[quote:4266689237="x888888"]j=(sbuf->st_mode>>(i*3))&07;[/quote]根据运算符优先顺序慢慢研究吧   
回复

使用道具 举报

 楼主| 发表于 2004-7-25 16:18:16 | 显示全部楼层
天哪,
我就是在这里错误无法编下去了,研究了很久都不行,
哪位高手行行好,
帮忙看以下可能错在哪里,
很急的
回复

使用道具 举报

发表于 2004-7-25 16:44:29 | 显示全部楼层
”j=(sbuf->st_mode>>(i*3))&07;“意为将sbuf->st_mode右移i*3位,然后再跟二进制的111相与(即截取低三位的值),循环三次,分别计算出文件或目录的属主、同组用户、其它组用户的权限。

引起段错误的语句是"strcat(perms,modes[j]);",应该将它改成"strcat(perms,modes[j-1]);"。比如权限位为x时,对应的字符权限为modes[]中的第x个元素,但下标却不是x而是x-1!!! 修正这个错误后程序即可正确运行。

不知你是从哪看来的这些代码,有误人之嫌。
回复

使用道具 举报

 楼主| 发表于 2004-7-25 17:42:01 | 显示全部楼层
感谢!
是书上的程序
回复

使用道具 举报

 楼主| 发表于 2004-7-26 22:45:48 | 显示全部楼层
有几个简单的c程序字符处理函数忘记了,手头又没有书,请各位朋友帮忙提供一下:
   从字符串中提取n个字符(从左边取,从右边取,从第几个字符取)
  把字符串转化为数字(有这样的函数吗?)
  把数字转化为字符串

谢谢!
回复

使用道具 举报

发表于 2004-7-28 00:33:45 | 显示全部楼层
可以自己写的嘛。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

GMT+8, 2024-11-7 18:05 , Processed in 0.053441 second(s), 12 queries .

© 2021 Powered by Discuz! X3.5.

快速回复 返回顶部 返回列表