华为今年的面试题

本题的功能是读取一个固定文件,并把它分段显示出来,最大读取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)没有注释   ,不知道大人要完成什么任务?

先找这么多吧^_^ 
 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值