华为今年的面试题 完整版

本题的功能是读取一个固定文件,并把它分段显示出来,最大读取1M,大于1M就按1M大小读取。LoadFile函数是一个读取固定文件的函数。假定其没有错误。 
下面代码未指定编译器,如果针对特定编译器有错,也请指出 
找出8个或8个以上错误 

#define   MAX_LEN   (1*1024*1024) 

void   main() 

char   *f; 
int   i,j; 
char   tmp[256]; 
  
LoadFile(f);//假定函数无错 

for(i   =   0;   i   <=   MAX_LEN;   i++) 

          if(f[i]   =   '/n ') 
          { 
                      tmp[j++]   =   f[i]; 
                      tmp[j]   =   0; 
                      printf(tmp); 
                      j   =   0; 
          } 
          else{ 
            tmp[j++]   =   f[i]; 
          } 
          



你能找出吗 

下面是相关网友的作答 

Oversense(步步文)   (   )   信誉:99     2007-09-08   13:01:37     
1.j   要初始化 

2.LoadFile(f)   是不是要改为   LoadFile(&f) 
3.如果是,后面要free(f) 

4.for里面有潜在的访问越界,tmp 

5.for里面有潜在的访问越界,f 

6.使用LoadFile和printf,对于某些编译器,是不是要包含某个头文件? 

7.f[i]   =   '/n '   要改成   == 

8.void   main()   可能针对某些编译器,通不过 

也许还有吧,这个代码整个思路就不对,不想看了 


crushor()   (   )   信誉:100     2007-09-08   13:27:57   
#define   MAX_LEN   (1*1024*1024) 

void   main() 

char   *f;   //未初始化 
int   i,j;   //未初始化,用下标访问时可能会越界 
char   tmp[256];//未初始化,不过不像上面那个那样有害处 
  
LoadFile(f);   //为什么可以认为无错?没给f分配空间,假如是在loadfile里分配,则可能导致 
                          //   内存泄漏,因为并没有显式释放的地方,当然这里是退出了,由系统回收了 

for(i   =   0;   i   <=   MAX_LEN;   i++)//这里循环的时候也完全未考虑f到底读到了多少个字符 
                                                          //也可能导致越界访问 

          if(f[i]   =   '/n ')     //=   ,my   god 
                                            //换行符不一样,win是 "/r/n ",linux是 "/n ",所以可能结果不符合目的 
          { 
                      tmp[j++]   =   f[i];     //可能导致越界, 
                      tmp[j]   =   0;             //上面++了,上面不越界这里也可能越界 
                      printf(tmp);   //假如原始文件就一行,则执行不到这边,所以也就打不出 
                                                //多行文件的话就导致最后一行打不出 
                      j   =   0;               
          } 
          else{ 
            tmp[j++]   =   f[i]; 
          } 
          




  xkw365(快乐天子)   (   )   信誉:100     2007-09-08   22:14:37   

#define   MAX_LEN   (1*1024*1024) 

void   main()     //   (1)int   main() 

char   *f;//(2)f的初始化 
int   i,j;//(3)long   int   i;要不然i越界;(4)j   得赋初值0 
char   tmp[256]; 
  
LoadFile(f);//假设函数无错     (5)loadfie()是什么函数,得声明一下吧 

for(i   =   0;   i   <=   MAX_LEN;   i++) 

          if(f[i]   =   '/n ')//(6)=改为== 
          { 
                      tmp[j++]   =   f[i];(7)   j> =256咋办? 
                      tmp[j]   =   0; 
                      printf(tmp);(8)程序开头得有包含printf()的头文件,用printf( "%s ",tmp); 
                      j   =   0; 
          } 
          else{ 
            tmp[j++]   =   f[i];(7)   j> =256咋办? 
          } 
          

      (9)加语句   return   0; 


(10)没有注释   ,不知道大人要完成什么任务? 

先找这么多吧^_^ 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值