c语言笔试题Word文档格式.docx
《c语言笔试题Word文档格式.docx》由会员分享,可在线阅读,更多相关《c语言笔试题Word文档格式.docx(11页珍藏版)》请在冰豆网上搜索。
请计算
sizeof(str)= ____________
sizeof(p)= ______________
sizeof(n)=
______________
344
(3)
UCHAR*pucCharArray[10][10];
typedefunionunRec
{
ULONGulIndex;
USHORT
usLevel[6];
UCHAR
ucPos;
}REC_S;
REC_S
stMax,*pstMax;
四字节对齐方式时:
sizeof(pucCharArray)=______,sizeof(stMax)=_______,sizeof(pstMax)=________,sizeof(*pstMax)=________.
40012412
(4)
structBBB
unsignedcharucId:
1;
unsignedcharucPara0:
2;
unsignedcharucState:
6;
unsignedcharucTail:
4;
unsignedcharucAvail;
unsignedcharucTail2:
unsignedlongulData;
}AAA_S;
问:
AAA_S在字节对齐分别为1、4的情况下,占用的空间大小是多少?
912
(6)#pragmapack(4)/*编译选项,表示4字节对齐*/
intmain(intargc,char*argv[])
{
structtagTest1
shorta;
chard;
longb;
longc;
};
structtagTest2
shortc;
longa;
structtagTest3
structtagTest1stT1;
structtagTest2stT2;
structtagTest3stT3;
printf("
%d%d%d"
sizeof(stT1),sizeof(stT2),sizeof(stT3));
return0;
}
#pragmapack()(编译选项结束)
请问输出结果是:
_________
121216
(7)enumENUM_A
X1=2,
Y1,
Z1=6,
A1,
B1
enumENUM_AenumA=Y1;
enumENUM_AenumB=B1;
请问enumA=____;
enumB=______;
38
(8)以下程序的输出结果是________.
#include
<
intfun(int
x,int
y)
static
int
m=0;
i=2;
i+=m+1;
m=i+x+y;
return
m;
voidmain()
j=4;
m=1;
k;
k=fun(j,m);
%d,"
k);
k=fun(j,m);
%d\n"
return;
817
(9)以下程序的输出结果为________
#defineCIR(r)
r*r/*请注意这种定义的缺陷,不允许这么定义*/
inta=1;
intb=2;
intt;
t=CIR(a+b);
t);
5
(10)structtagABC
{
char
cB;
shortsC;
cD;
long
lA;
}*pAbc;
pAbc=0x100000;
那么pAbc+0x100=0x_________;
(ULONG)pAbc+0x100=0x_________;
(ULONG*)pAbc+0x100=0x_________;
(char*)pAbc+0x100=0x_______;
100C00
100100
100400
100400
2.改错题
(1)下面程序把"
hello"
这个字符串输出,请指出其中的错误。
voidTest(void)
charpcArray[10];
strncpy(pcArray,"
5);
%s\n"
pcArray);
strncpy没有把中止符NULL写入数组中
(2)如下程序用于把"
系统备板工作异常"
字符串打印出来,请指出其中的错误:
voidPrintErrInfo(void)
characMsg[16];
strcpy(acMsg,"
);
%s"
acMsg);
每个汉字占两个字节,空间不足,字符串结尾还有'
\0'
(3)如下函数实现打印字符串"
helloworld"
的功能,请指出错误:
#defineBUFFER_SIZE
256
voidGetMemory(char*pszBuf)
if(NULL==pszBuf)
ASSERT(0);
return;
}
pszBuf=(char*)malloc(BUFFER_SIZE);
char*pszBuf=NULL;
GetMemory(pszBuf);
strcpy(pszBuf,"
helloworld\r\n"
pszBuf);
free(pszBuf);
函数要返回指针就需要传进去指针的地址
(4)本题不考虑魔鬼数字问题
voidAddFunc(unsignedinta,unsignedintb,unsignedint*c)
*c=a+b
voidmain(void)
unsignedchare=200;
unsignedcharf=100;
unsignedcharg=0;
AddFunc((unsignedint)e,(unsignedint)f,(unsignedint*)&
g);
%d"
g);
g是一个字节的变量,将g的地址强制转换成四个字节unsignedint地址,导致写内存越界
(5)找出下面题目中的错误
#defineID_LEN
32
structSTR_A
charaucID[ID_LEN];
iA;
structSTR_B
char*paucID;
intiB;
//该函数将pstB内的paucID指向结构stA的aucID
voidfuncA(structSTR_AstA,structSTR_B*pstB)
pstB->
paucID=stA.aucID;
main()
STR_AstA={0};
STR_BstB;
strcpy(stA.aucID,“12345”);
funcA(stA,&
stB);
printf(“%s\n”,stB.paucID);
funcA传入的stA的参数是一个值拷贝,pstB指向的是堆栈中的地址。
(6)指出下面程序的错误
VOIDB(ULONG*p)
*p=66*10000;
return;
VOIDA()
unsignedshorta=10*1000;
B((ULONG*)(&
a));
字符越界/溢出
7、请找出下面代码中的所有错误(题目不错,值得一看)
说明:
以下代码是把一个字符串倒序,如“abcd”倒序后变为“dcba”
#include"
string.h"
main()
{
char*src="
hello,world"
char*dest=NULL;
intlen=strlen(src);
dest=(char*)malloc(len);
char*d=dest;
char*s=src[len];
while(len--!
=0)
d++=s--;
printf("
dest);
return0;
}
方法1:
一共有4个错误;
intmain()
{
char*src="
intlen=strlen(src);
char*dest=(char*)malloc(len+1);
//要为分配一个空间 char*d=dest;
char*s=&
src[len-1];
//指向最后一个字符
while(len--!
=0)
*d++=*s--;
*d=0;
//尾部要加’\0’
printf("
%sn"
free(dest);
//使用完,应当释放空间,以免造成内存汇泄露
dest=NULL;
//防止产生野指针
}
方法2:
(方法一需要额外的存储空间,效率不高.) 不错的想法
string.h>
charstr[]="
intlen=strlen(str);
chart;
for(inti=0;
i<
len/2;
i++)
t=str[i];
str[i]=str[len-i-1];
//小心一点
str[len-i-1]=t;
str);
8、请问下面程序有什么错误?
inta[60][250][1000],i,j,k;
for(k=0;
k<
=1000;
k++)
for(j=0;
j<
250;
j++)
for(i=0;
i<
60;
i++)
a[i][j][k]=0;
答:
把循环语句内外换一下