拿到这个项目的时候,我第一反应是用链表嵌套链表的结构,这样对于各项功能的实现都很方便,结果后来还是没弄出来,白白浪费了一天的时间。我的逻辑思维是没错的,但是这个链表嵌套链表还是有很大难点的,等不忙了再研究研究。 大多数的错误就是段错误,最典型的是理武兄的问题,链表head没有开空间,还有一个典型错误是数组赋值 ,一定要加&,不加&编译时不会报错,但是运行会出现段错误。还有就是坑了我的错误命令gcc –o main.c a.out –Wall。 我犯的最大的小错误,是在读取文件的时候,想判断管理员密码是否为’”\0”,如果是”\0”,则默认初始密码,如果不为0,则将文件中保存密码赋值给管理员,我的源代码是这样的 int load(stu_t *head,char (*admin)[30]){ stu_t*cur = NULL,*cur2=NULL; FILE*fp = NULL; charad_pass[30] = "\0"; inti=0; if(NULL== head){ return; } fp=fopen("data","a+"); if(NULL== fp){ fclose(fp); return1; } fread(ad_pass,sizeof(char)*30,1,fp); //读取管理员密码 if(ad_pass,!= ‘\0’){ strcpy(admin[1],ad_pass); for(i=0;admin[1][ i]!= '\0';i++){ admin[1][ i]-= 'a'; //管理员密码解密,每一位减'a' } } ……省略 咋一看,觉得没错,编译也没报错,但是就是管理员账户密码一直无法登陆,后来在老师的指引下,我知道了自己犯的错误。其中还发现一个严重的问题,就是我的语言组织能力不好,不能一句话切入重点,就像毛毛说的,总是有很多铺垫。。。。正确的代码应该是下面这样,ad_pass 是一个字符数组,ad_pass是首地址,我要判断它是否为空,应该比较两个数组才对,可是我判断的是首地址。。。。然后就这么错了。 if(strcmp(ad_pass,"\0") != 0){ strcpy(admin[1],ad_pass); for(i=0;admin[1][ i]!= '\0';i++){ admin[1][ i]-= 'a'; //管理员密码解密,每一位减'a' } 还有,今天写验证码函数,又写错了,一直提示验证码输入错误。还有每个函数都要 有入参验证,其他的就没什么了,有些第一次遇到的问题,也根据自己的经验写出了算法。总的来说,还是相对轻松的。
还有一个面试官可能问到的问题,大概程序如下: 2.int main(){ stu_t *user = NULL,cur = NULL; if(use(create(sizeof(stu_t)))!=0){ func1();…… func2…… inserte_head(user,cur); } 问:user是否为空? user 没有赋值语句,没有开空间,当然是空的,不能被表面现象蒙蔽了双眼。 还有一个问题,就是写一个函数,修改指针的值,一定要是指向指针的指针。逐级加一个指针。这个是我们老师曾经这么干过,
|