记C语言笔试题

记2021.1.29广州通则康威笔试
面试的是软件工程师(C语言偏嵌入式)
总共6道题,30分钟。
1.static全局变量和普通全局变量的区别?static局部变量和普通局部变量的区别?static函数与普通函数的区别?
经常会遇到的一道面试题。static修饰的全局变量限定了该全局变量的作用域,使其只作用于本模块,在本模块内有效;而普通的全局变量可以可以作用于其他的模块,作用域更大。 static修饰的局部变量储存在内存数据段的静态区,生命周期变长,作用域不变,在下次调用该变量时依旧使用上次的值。而普通的局部变量储存在栈区,在函数调用完后就会释放,下次调用又重新申请。static函数限定了其作用域,使其只在本模块内可调用,在其他模块不行。而普通函数可以在其他的模块内调用。

2.写出下面程序的执行结果。

int main(int argc,char **argv)
{
	char *pStr;
	char szData[]="tozed";
	pStr=(char *)szData;
	printf("%ld,%ld,%d,%d",sizeof(pStr),sizeof(szData),strlen(pStr),strlen(szData));
	return 0;
}

考察关键字sizeof与函数strlen()以及字符串,数组,指针的一道基本的题目。
基于32位操作系统,sizeof()求指针所占字节,sizeof(数组名)是求数组所占的字节大小,strlen()求字符串长度,遇到‘\0’结束。输出4,6,5,5。

3.指出下面程序所有可能出现的错误。

void main()
{
int x,y;
int *ptr;
char *str;
*ptr=8;
y=8358300000;
ptr=y;
if(*ptr=3)
strcpy(str,"this is a test");
return 0;
}

找错误题,可能平时做的少,一开始有点懵,只找到:*ptr=8可能会引起段错误,因为指针ptr指向的空间未知,不安全。y=8358300000,感觉有点大,就写了超出了int型的范围,导致溢出。之后查了一下,确实超了几倍。在32位操作系统中,ptr=y也超出了地址取值范围。在64位操作系统中,ptr=y就没有什么问题了。这个判断语句,弄成赋值语句,由于str指向的地址也不确定,也会导致段错误。最后返回值return 0和函数的无返回值冲突,引起警告。
感觉这个题,真的是每一句都有问题,指针定义时候最好指向确定地址,如char *p=NULL;不然是一个野指针,不安全。

4.实现int myStrcpy(char *dest,const char *src),不使用strcpy及其他库函数。
笔试经常遇到的一个题。

int myStrcpy(char *dest,const char *src)
{
char *temp=dest;
if(dest==NULL||src==NULL)
return -1;
while((*temp++=*src++)!='\0');
return 0;
}

6.自定义函数,读出文本文件msg.txt所有内容,返回文件的总字节数。
忘了具体的。只答了fopen,fread,fclose三个函数,不记得里面参数填啥。
之后复习了下

FILE *fopen(const char *path, const char *mode);
size_t fread(void *ptr, size_t size, size_t nmemb, FILE *stream);
int fclose(FILE *stream);

int fun(void)
{
	char buf[1000]={0};
	int i=100, num=0;
	FILE *fp=NULL;
	fp=fopen("./msg.txt",r);
	if(fp==NULL)
		printf("fopen error!\n");
		while(i==100)
		{
		 i=fread(buf,1,100,fp); 
		 num+=i;
		}
	fclose(fp);
	return num;
}

感觉还是不知道存储的数据,需要先读出有多少数据,之后再申请多大空间储存内容才行。

  • 6
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 7
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值