本题的功能是读取一个固定文件,并把它分段显示出来,最大读取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)没有注释 ,不知道大人要完成什么任务?
先找这么多吧^_^
华为今年的面试题 完整版
最新推荐文章于 2024-04-29 20:04:18 发布