C语言编程基础考试试题_第1页
C语言编程基础考试试题_第2页
C语言编程基础考试试题_第3页
C语言编程基础考试试题_第4页
C语言编程基础考试试题_第5页
已阅读5页,还剩29页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

C语言编程基础考试[考前说明]本题目中不考虑头文件引用问题(假定已经包含正确的头文件),C语言的标准函数都可用;如果不特别说明,假定程序运行环境为:操作系统Windows2000,VC6.0编译环境,缺省为四字节对齐X86(80586)CPU处理器(32位小字节序处理器).一、单选题1、 给出以下定义:characX[]="abcdefg";characY[]={'a','b','c','d','e','f','g'};则正确的叙述为()数组acX和数组acY等价 B)数组acX和数组acY的长度相同C)数组acX的长度大于数组acY的长度 D)数组acX的长度小于数组Y的长度2、 voidexample(characHello[]){printf("%d",sizeof(acHello));return;}voidmain(){characHello[]="hello";example(acHello);return;}的输出是()A4B5 C6 D不确定3、以下叙述中不正确的是( )在不同的函数中可以使用相同名字的变量函数中的形式参数是在栈中保存在一个函数内定义的变量只在本函数范围内有效在一个函数内的复合语句中定义的变量在本函数范围内有效(复合语句指函数中的成对括号构成的代码)4、 设有如下定义:unsignedlongpulArray[]={6,7,8,9,10};unsignedlong*pulPtr;则下列程序段的输出结果为()pulPtr=pulArray;

*(pulPtr+2)+=2;printf("%d,%d\n",*pulPtr,*(pulPtr+2));A)8,10B)6,8C)7,9D)6,105、 有以下程序段characArr[]="ABCDE";char*pcPtr;for(pcPtr=acArr;pcPtr<acArr+5;pcPtr++)printf("%s\n",pcPtr);}return;输出结果是()C)EDCC)EDCBAD)ABCDEBCDECDEDEEBCDE6、voidexample(){inti;characNew[20];for(i=0;i<10;i++){acNew[i]='0';}printf("%d\n",strlen(acNew));return;}的输出为(D)A0B10 C11 D不确定7、 switch(c)中的c的数据类型可以是char、long、float、unsigned、bool.()正确B.错误8、 全局变量可以定义在被多个.C文件包含着的头文件中。()正确B.错误9、 structstu{int num;char name[10];

intage;};voidfun(structstu*p){printf("%s\n",(*p).name);return;}voidmain(){structstustudents[3]={{9801,"Zhang",20},{9802,"Wang",19},{9803,"Zhao",18}};fun(students+2);return;}输出结果是()C)Wang D)18A)Zhang B)ZhaoC)Wang D)1810、以下程序运行后,输出结果是(voidmain(){char*szStr="abcde";szStr+=2;printf("%lu\n",szStr);return;}B字符B字符c的ASCLL码值D出错C"abcde"这个常串中字符c所在的地址11、在X86下,有下列程序#include<stdio.h>voidmain(){union{int k;char i[2];}*s,a;s=&a;s->i[0]=0x39;s->i[1]=0x38;printf("%x\n",a.k);输出结果是()A)3839 B)3938 C)380039 D)不可预知12、 网络上传输的字节序默认是大字节的,如果主机是小字节序,在网络通信时则须进行字节序转换;如果主机是大字节序,为了程序的一致性及可移植性,最好也在程序中加上字节序转换的操作(空操作)。()正确B.错误13、 voidexample(){inti;characNew[20]={0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0};for(i=0;i<10;i++){acNew[i]='0';}printf("%d\n",strlen(acNew));return;}的输出为:()A0B10 C11 D不确定14、 在函数内部定义的变量(静态变量、寄存器变量等特殊变量除外)的内存是TOC\o"1-5"\h\z在栈内存中,所以在定义函数内部的变量的时候,一定要保证栈不能够溢出。如果临时变量占用空间较大,应该使用内存申请的方式,这样该变量指向的内存就是在堆内存中了。( )A.正确B.错误15、 局部变量可以和全局变量重名,编译的时候不会出现错误,但一旦不小心,就可能导致使用错误变量,所以在定时局部变量的时候,不要和全局变量重名。( )A.正确B.错误16、 设有以下宏定义:#define N 3#define Y(n) ((N+1)*n)/*这种定义在编程规范中是严格禁止的*/则执行语句:z=2*(N+Y(5+1));后,z的值为()A)出错 B)42 C)48 D)5417、int*(*ptr)();则以下叙述中正确的是()A)ptr是指向一维组数的指针变量ptr是指向int型数据的指针变量ptr是指向函数的指针,该函数返回一个int型数据ptr是指向函数的指针,该函数的返回值是指向int型数据的指针18、0x12345678在采用BigEndian中内存的排列顺序是 ,在采用LittleEndian内存中的排列顺序是 .(答案从左到右内存地址依次增加)A.12345678B.34127856C.78563412D.5678123419、 请指出下面程序问题#defineMAX_LEN254unsignedcharArray[MAX_LEN];intmain(intargc,char*argv[]){inti;for(i=0;i<=MAX_LEN;i++){Array[i]=i;}return;}程序的错误为():A、 i=MAX_LEN时,数组越界B、 argv参数形式错误C、 i=MAX_LEN时,赋值溢出D、 return无返回值20、 #defineBUFFER_SIZE 256voidGetMemory(char**ppszBuf){if(NULL==ppszBuf){ASSERT(0);return;}*ppszBuf=(char*)malloc(BUFFER_SIZE);return;}voidTest(void){char*pszBuf=NULL;GetMemory(&pszBuf);strcpy(pszBuf,"helloworld\r\n");printf("%s",pszBuf);free(pszBuf);return;}下面说法正确的是():A、 pszBuf的值永远为NULL;B、 malloc内存后没有判断是否成功;C、 strcpy拷贝越界;D、 GetMemory无法将申请的内存地址传递给pszBuf;21、 如下程序用于把"blue"字符串打印出来:voidPrintBLUE(){charpcBlue[]={'b','l','u','e'};printf("%s",pcBlue);return;}下面描述正确的是():A、 pcBlue数组初始化时没有字符串结束符;B、 数组pcBlue定义时必须指明长度;22、 请指出下面这段代码中的错误:unsignedlongFUNC_B(unsignedlongulCount){unsignedlongulSum=0;while(0<=ulCount){ulSum+=ulCount;ulCount--;}returnulSum;}voidtest(void){unsignedlongulTotal=0;ulTotal=FUNC_B(10);printf("%lu",ulTotal);}面描述正确的是():A、 while循环判断始终为真;B、 test打印输出55;C、 循环体内在执行2的32次方后,ulSum开始溢出翻转;23、 此函数实现把32位IP地址(网络序)以字符串的方式打印出来:char*IpAddr2Str(unsignedlongulIpAddr){charszIpAddr[32];unsignedlongulLocIpAddr=ntohl(ulIpAddr);//把网络序转话为主机序(void)VOS_sprintf(szIpAddr,"%d.%d.%d.%d",ulLocIpAddr>>24,(ulLocIpAddr>>16)&0xff,(ulLocIpAddr>>8)&0xff,ulLocIpAddr&0xff);returnszIpAddr;}下面描述正确的是():A、 数组szIpAddr空间不够;B、 函数返回局部数组szIpAddr变量地址;C、 输出的IP地址次序颠倒;24、 如下程序用于把"blue"字符串返回:char*GetBLUE(void){char*pcColor;char*pcNewColor;pcColor="blue";pcNewColor=(char*)malloc(strlen(pColor));if(NULL==pcNewColor){returnNULL;}strcpy(pcNewColor,pcColor);returnpcNewColor;}下面描述正确的是:A、 字符串“blue”存放在栈内;B、 函数GetBLUE返回局部变量地址;C、 内存空间分配长度不够,strcpy函数拷贝越界;25、 如下代码实现中,FUNC_A为每毫秒定时执行的函数,在该函数中,需要实现每TIME_INTERVAL毫秒执行一次DO_Something()的操作。请指出段代码中的错误:#defineULONGunsignedlong#defineTIME_INTERVAL200voidDO_Something(void){/* */return;}voidFUNC_A(){staticULONGulPreCall=0;ULONGulNowInMsHigh=0;ULONGulNowInMsLow=0;(VOID)VOS_Tm_Now(&ulNowInMsHigh,&ulNowInMsLow);/*获取当前的时间,以毫秒为单位,用64bits表示,ulNowInMsHigh为高32位,ulNowInMsLow为低32位*if((0==ulPreCall)||(ulNowInMsLow>=(ulPreCall+TIME_INTERVAL))){ulPreCall=ulNowInMsLow;}else{return;}DO_Something();return;}A、 函数FUNC_A第一次被调用时,不执行Do_Something()操作;B、 函数FUNC_A功能在一段时间后失效,因为ulNowInMsLow溢出翻转;C、 ulPreCall不应该定义为静态变量;26、下面的代码中,函数Test执行完毕后,希望输出1。请指出错误:voidVarInit(unsignedchar*pucArg){*pucArg=1;return;}voidTest(){unsignedlongulGlobal;VarInit(&ulGlobal);printf("%lu",ulGlobal);return;}下面描述正确的是:()给VarInit()函数传递的参数类型错误printf()输出格式错误传给VarInit()中参数pucArg的值为空指针TOC\o"1-5"\h\z27、#defineOK 0#defineERR 1#defineERROR (-1)#defineBUFFER_SIZE 256char*GetMemory(unsignedlongulSize){char*pcBuf=NULL;pcBuf=(char*)malloc(ulSize);if(NULL==pcBuf){returnERROR;}returnpcBuf;}voidTest(void){char*pszBuf=NULL;pszBuf=GetMemory(BUFFER_SIZE);if(NULL!=pszBuf){strcpy(pszBuf,"HelloWorld!\r\n");printf(pszBuf);free(pszBuf);}return;}如下描述正确的是:A、 pszBuf指向的内存不能超过255B、 GetMemory函数的异常分支返回了-1,是一个非法地址C、 GetMemory中异常分支没有释放空间;D、 pcBuf为局部指针,指向的内存将在GetMemory被调用后释放28、 voidAddFunc(unsignedinta,unsignedintb,unsignedint*c){*c=a+b;}voidmain(void){unsignedchare=200;unsignedcharf=100;unsignedcharg=0;AddFunc((unsignedint)e,(unsignedint)f,(unsignedint*)&g);printf("%d",g);}下面说法正确的是():A对g进行类型转换导致函数调用时写内存越界;B对e、f进行类型转换导致函数调用时写内存越界;C函数调用时不能改变g的值。29、#defineNULL0#defineMEM_OK0#defineMEM_ERR1enumENUM_STAT_ITEM{STAT_ITEM0,STAT_ITEM1,STAT_ITEM_BUTT};typedefstructtag_PERM_COUNT_STAT_INFO{unsignedshortstat_item;unsignedshrotnumber;}_SPermCountStatInfo;_SPermCountStatInfopcsi[STAT_ITEM_BUTT]={{STAT_ITEM0, 16000},{STAT_ITEM1, 50000},}unsignedlong*pulStatDataBuffer=NULL;unsignedshortAllocPermMemory(void){unsignedshortusBufferSize=0;unsignedshortusLoop=0;for(usLoop=0;usLoop<STAT_ITEM_BUTT;usLoop++){usBufferSize+=pcsi[usLoop].number;}pulStatDataBuffer=(unsignedlong*)malloc(sizeof(unsignedlong)*usBufferSize);if(NULL==pulStatDataBuffer){returnMEM_ERR;}returnMEM_OK;}下面说法正确的是():Aunsignedshort类型不能表示循环体中将16000与50000相加的和66000B数组pcsi的number域是unsignedshort类型,不能表示50000这么大的数字C循环条件应该改为usLoopv=STAT_ITEM_BUTT30、设有如下定义:BOOLgstatusA=FALSE;BOOLgstatusB=TRUE;intgvarA=100;intgvarB=100;则执行main函数后后gvarA和gvarB的值分别为()BOOLCheckA(){if(gstatusA){gvarA++;}else{gvarA--;}returngstatusA;}BOOLCheckB(){if(gstatusB){gvarB++;}else{gvarB--;}returngstatusB;}intmain(intargc,char*argv[]){if(CheckA()&&CheckB()){printf(“StatusOK”);}return0;}99和10099和10199和99101和9931、请问下面函数中1、2、3应该填入什么语句才合理?()A、 不添,不添,不添B、 free(pMsg);,free(ptmpMsg);,不添C、 free(pMsg);,free(ptmpMsg);,free(ptmpMsg);D、 不添,free(pMsg);,free(ptmpMsg);E、 free(pMsg);,free(pMsg);,free(ptmpMsg);F、 不添,不添,free(ptmpMsg);#defineCOMM_MSG_LEN100char*get_message_buffer(intmalloc_len){char*ptr=NULL;ptr=(char*)malloc(malloc_len)returnptr;}intfunc_test(void){intmalloc_len=COMM_MSG_LEN;char*pMsg=NULL;char*ptmpMsg=NULL;pMsg=get_message_buffer(malloc_len);if(NULL==pMsg){ 1___returnERROR;}fillMessage(pMsg);sendMessage(pMsg);ptmpMsg=get_message_buffer(malloc_len);if(NULL==ptmpMsg){ 2___returnERROR;fillMessage(ptmpMsg);sendMessage(ptmpMsg);free(pMsg); 3___returnOK;}32、 请问下面题目中a,b,c输出值为多少?()A、 10,210,30B、 100,210,300C、 110,210,310D、 100,210,30E、 110,200,30#include<stdio.h>#definefunc(A) A++;\A*=10;intmain(intargc,char*argv[]){inta=10;intb=20;intc=30;if(a>10)func(a);if(b>=20)func(b);if(c>30){func(c);}printf("a=%d,b=%d,c=%d\r\n",a,b,c);return0;}33、 #defineMAX_MEM_SIZE100intGetMem(intiLen,void**ppMem){if(NULL==ppMem){return-1;}if(iLen<=0){return0;}elseif(iLen<MAX_MEM_SIZE){*ppMem=malloc(iLen);returniLen;}else{*ppMem=malloc(MAX_MEM_SIZE);returnMAX_MEM_SIZE;}}voidtest(){char*pMyMem;inti;intj;i=GetMem(i,(void**)&pMyMem);if(NULL!=pMyMem){for(j=0;j<i;j++){pMyMem[j]=0;}}}下面说法正确的有;()A、 因为pMyMem未初始化,test函数中的GetMem可能会返回一1;B、 因为i未初始化,test函数中GetMem可能会返回比MAX_MEM_SIZE大的值;C、 因为pMyMem未初始化,for循环内的赋值操作可能会导致写内存异常;D、 无论pMyMem,i,j为何值时,test函数内都不会出现写内存异常;34、#defineMAX_MEM_SIZE100intGetMem(intiLen,void**ppMem){if(iLen<0){return-1;}elseif(0==iLen){return0;}elseif(iLen<MAX_MEM_SIZE){*ppMem=malloc(iLen);returniLen;}else{*ppMem=malloc(MAX_MEM_SIZE);returnMAX_MEM_SIZE;}}voidtest(){char*pMyMem;inti,k;unsignedintj;j=GetMem(i,&pMyMem);if(j>0){for(k=0;k<i;k++){pMyMem[k]=0;}}}下面说法正确的有:A、 只要将pMyMem初始化为NULL,可以避免test函数内的for循环出现写内存异常;B、 虽然i和pMyMem均未初始化,只要将if(j>0)改为if((0vj)&&(jv=MAX_MEM_SIZE)),可以避免出现for循环内写内存异常;C、 虽然i和pMyMem均未初始化,只要将test函数内的for循环比较由kvi改为kvj,可以避免出现for循环内写内存异常;D、 上面三种说法都不对。35、#defineBUF_LEN2048structAAA{ULONGulLen; 〃指示buf中实际占用字节数CHARbuf[BUF_LEN];//存储缓冲区};函数PrintBufLen的作用是打印出结构体中的buf的实际占用长度,有下面两种实现方法:方法一:VOIDPrintBufLen(structAAA*pBuf){if(NULL==pBuf){printf("Error,pBufisNull.\n");return;}printf("len=%u\n",pBuf->ulLen);return;}方法二:VOIDPrintBufLen(structAAABuf){printf("len=%u\n",Buf.ulLen);return;}以下说法只有一个正确的是:()A:优选方法一,原因是以指针作为入参,减少函数参数压栈的系统开销。B:优选方法二,原因是可以不做入参合法性判断,不容易出错。C:两种方法差不多,可以任意选择。D:以上说法都不对。36、voidmain(void){unsignedchara=200;unsignedcharb=100;unsignedcharc=0;c=a+b;printf("%d%d",a+b,c);}下列程序的执行结果为(C)A300300B4444C30044D4430037、 有如下宏定义和结构定义#defineMAX_SIZEA+Bstruct_Record_Struct{unsignedcharEnv_Alarm_ID:4;unsignedcharPara1:2;unsignedcharstate;unsignedcharavail:1;}*Env_Alarm_Record;pointer=(struct_Record_Struct*)malloc(sizeof(struct_Record_Struct)*MAX_SIZE);当A=2,B=3时pointer分配()个字节的空间。注意:机器是按照4字节对齐20 B)15C)llD)938、 在X86,VC++6.0环境下,有下列程序#include<stdio.h>intmain(){char c;unsignedcharuc;unsignedshortus;c=128;uc=128;us=c+uc;printf("0x%x",us);us=c+(short)uc;printf("0x%x",us);us=(unsignedchar)c+uc;printf("0x%x",us);us=c+(char)uc;printf("0x%x",us);return0;输出结果是()0x00x00x100OxffOO0x00x1000x1000xff000x00x1000x1000x00x00x00x1000x039、#include"stdio.h"unsignedshort*sum(unsignedchara,unsignedcharb){unsignedshorts=0;s=a+b;return&s;}intmain(){unsignedshort*p=NULL;unsignedchara=1,b=2;p=sum(a,b);printf("%u+%u",a,b);printf("=%u\n",*p);return0;}程序执行结果是()1+2=0 B.1+2=3C.1+2=NULLD.不可预测二、多选题40、voidGetMemory(char**ppcChar,intiLength){if(NULL==ppcChar){return;}*ppcChar=(char*)malloc(iLength);return;}voidmain(){char*szStr=NULL;GetMemory(&szStr,100);if(NULL!=szStr){strcpy(szStr,"hello");printf(szStr);}return;}下面描述正确的是():A、 iLength应该判断是否大于0;B、 程序中使用魔鬼数字;C、 当szStr不为空时,没有释放分配的内存;D、 printf(szStr)无法输出字符串41、 下面程序期望输出str=helloworld:char*GetStr(char*p){p="helloworld";returnp;}voidmain(){char*str=NULL;if(NULL!=GetStr(str)){printf("\r\nstr=%s",str);}return;}下面描述正确的是:A、 Str始终为NULL;B、 函数GetStr返回值始终不为空;C、 该程序无法得到预期的输出结果,因为GetStr函数无法将字符串地址带给实参;42、 下面程序期望得到global_variable的值,并打印出来。unsignedcharglobal_variable;voidGetGlobalAddr(unsignedchar*p){p=&global_variable;}voidmain(){unsignedchar*temp=NULL_PTR;GetGlobalAddr(temp);printf("\r\nGotglobalvariablevalue=%u",*temp);return;}下面说法正确的是():A对p强制类型转换错误;B调用函数时,局部变量p存在于栈中;Cp值的改变不会影响temp;D调用函数后,temp的值被改变为global_variable的地址。43、 #defineMAX_LEN2_UC*ConvertCode(_UC*p_byte,_UCnum){_ULi=0;_UCstrTemp[MAX_LEN];if(NULL==p_byte){returnNULL;}memcpy(strTemp,p_byte,MAX_LEN);return(_UC*)strTemp;}voidmain(void){_UCstr[MAX_LEN];_UC*p;str[0]=0x12;str[1]=0x34;p=ConvertCode(str,MAX_LEN);printf("%s",p);return0;}下面说明中,描述正确的是():A、 输入参数p_byte为空指针B、 函数ConvertCode返回值没有判断C、 没有判断p_byte空间和MAX_LEN的大小D、 返回局部变量地址44、 #include<stdio.h>#include<malloc.h>#include<string.h>#defineMaxMsgLen2048BOOLMaxMsgFlag=FALSE;char*get_buffer(intmsg_len){char*ptr=NULL;intlen=msg_len;ptr=(char*)malloc(len);if(NULL==ptr){returnNULL;}returnptr;}intmain(intargc,char*argv[]){intmsg_len;char*pMsg;if(TRUE==MaxMsgFlag){msg_len=MaxMsgLen;}pMsg=get_buffer(msg_len);if(NULL!=pMsg){strcpy(pMsg,"Ilovethisgame!");printf("%s",pMsg);free(pMsg);}return0;}上面的程序存在问题,下面描述正确的是()A、 函数get_buffer没有判断入参msg」en是否大于等于0。B、 函数main中pMsg没有赋初值C、 函数main中msg_len没有赋初值D、 函数main中free(pMsg)后,没有把pMsg置为NULL。45、请指出下面程序的错误:()voidTest(void){char*szStr=(char*)malloc(100);if(NULL==szStr){return;}strcpy(szStr,"hello");free(szStr);if(NULL!=szStr){strcpy(szStr,"world");printf(szStr);}return;}A、 strepy没有将结尾符拷贝到szStr中B、 对释放空间的指针进行拷贝操作C、 printf随机打印D、 没有返回值46、 定义结构体时有下面几种说法,请指出正确的A、 结构体中的每个部分,最好进行四字节对齐;B、 结构体的总长度最好是四字节对齐;C、 结构中成员的存放不用考虑字节对齐情况;47、下列定义正确的有( )A:char*pcPtr 二"abed";B:charpc[4]="abed";C:charpc[]="abcd";D:charpc[]='abcd';E:charpc[]二{,a,,,b,,,c,,,d,,,\0,};F:charpc[]='a''b''c''d';三、填空:48、 ehar*peColor="blue1";characColor[]="blue1";strlen(pcColor)= strlen(acColor)= sizeof(pcColor)= sizeof(acColor)= 554649、 eharstr[]="\\\0";char*p=str;intn=1000;请计算sizeof(str)= sizeof(p)= sizeof(n)二 44

50、 UCHAR*pucCharArray[10][10];typedefunionunRec{ULONGulIndex;USHORT usLevel[6];UCHAR ucPos;}REC_S;REC_SstMax,*pstMax;四字节对齐方式时:sizeof(pucCharArray)= ,sizeof(stMax)= ,sizeof(pstMax)= ,sizeof(*pstMax)= .4001241251、 typedefunionunHead{UCHARaucSrc[6];structtagContent{UCHARucFlag[3];ULONGulNext;}Content;}HEAD_S;TOC\o"1-5"\h\z32CPU,VC编译环境下:在强制一字节对齐情况下,请指出sizeof(HEAD_S)= ;在强制二字节对齐情况下,请指出sizeof(HEAD_S)= ;在强制四字节对齐情况下,请指出sizeof(HEAD_S)= ;8852、 UCHAR*pszTest="hello";UCHARaucTest[]="hello";请问sizeof(pszTest)= ,sizeof(*pszTest)= ,sizeof(aucTest)=1653、 structBBB{longcharshortcharshort}*p;{longcharshortcharshort}*p;lNum;*pcNamesDate;cHa[2];sBa[6];p=0x100000;p+0x1=0x (unsignedlong)p+0x1=0x (unsignedlong*)p+0x1=0x (char*)p+0x1=0x 10001810000110000410000154、在4字节对齐的情况:typedefstructtagRec{longlA1;charcA2;charcA3;longlA4;longlA5;}REC_S;voidmain(intargc,char*argv[]){REC_SstMax;printf("sizeof(stMax)=%d",sizeof(stMax));return;}输出结果为:sizeof(stMax)= 1655、voidmain(){unsignedlongulA=0x11000000;printf("%x",*(unsignedchar*)&ulA);return;}输出结果为:056、在VRP中,实现了strncpy类似的函数,定义如下:#defineCHARchar#defineULONGunsignedlong#defineVOIDvoidCHAR*VOS_strncpy(CHAR*pcDest,constCHAR*szSrc,ULONGulLength){CHAR*pcPoint=pcDest;if((NULL==szSrc)||(NULL==pcDest))){returnNULL;}while(ulLength&&(*pcPoint=*szSrc))/*这里采用了在判断语句中赋值的方式(*pcPoint二*szSrc),建议尽量不使用*/{pcPoint++;szSrc++;ulLength--;}if(!ulLength){*pcPoint='\0';}returnpcDest;}VOIDmain(VOID){CHARszStrBuf[]="1234567890";CHARszStrBuf1[]="1234567890";strncpy(szStrBuf,"ABCD",strlen("ABCD"));VOS_strncpy(szStrBuf1,"ABCD",strlen("ABCD"));printf("Str1=%s\nStr2=%s",szStrBuf,szStrBuf1);}输出结果为:ABCD567890ABCD57、 characHello[]="hello\0world";characNew[15]={0};strcpy(acNew,acHello);strlen(acNew)= sizeof(acHello)= 1258、 typedefstructtagTest{UCHAR ucFlag;ULONG ulLen;}TEST_S;TEST_Stest[10];四字节对齐方式时:sizeof(TEST_S)= ,sizeof(test) ,8059、 structtagAAA{unsignedcharucId:1;unsignedcharucPara0:2;unsignedcharucState:6;unsignedcharucTail:4;unsignedcharucAvail;unsignedcharucTail2:4;unsignedlongulData;}AAA_S;问:AAA_S在字节对齐分别为1、4的情况下,占用的空间大小是多少?1260、#pragmapack(4)/*编译选项,表示4字节对齐*/intmain(intargc,char*argv[]){structtagTest1{shorta;chard;longb;longc;};structtagTest2{longb;shortc;chard;longa;};structtagTest3{shortc;longb;chard;longa;};structtagTest1stT1;structtagTest2stT2;structtagTest3stT3;printf("%d%d%d",sizeof(stT1),sizeof(stT2),sizeof(stT3));return0;}#pragmapack()(编译选项结束)请问输出结果是: 12121661、enumENUM_A{X1,Y1,Z1=5,A1,B1};enumENUM_AenumA=Y1;enumENUM_AenumB=B1;请问enumA= ;enumB= ;1762、以下程序的输出结果是 .#include<stdio.h>intfun(intx,inty){staticint m=0;staticint i=2;i+=m+1;m=i+x+y;returnm;}voidmain(){int j=4;int m=1;intk;k=fun(j,m);printf("%d,",k);k=fun(j,m);printf("%d\n",k);return;81763、以下程序的输出结果为#defineCIR(r)r*r/*请注意这种定义的缺陷,不允许这么定义*/voidmain(){inta=1;intb=2;intt;t=CIR(a+b);printf("%d\n",t);return;}564、 characHello[]="hello\0world";characNew[15]={0};memcpy(acNew,acHello,12);strlen(acNew)= sizeof(acHello)= 51265、 uniontagAAAA{struct{charucFirst;shortusSecond;charucThird;}half;longlI;}number;structtagBBBBB{charucFirst;shortusSecond;charucThird;shortusForth;}half;structtagCCCC{struct{charucFirst;shortusSecond;charucThird;}half;longlI;};在字节对齐为1下,sizeof(uniontagAAAA)、sizeof(structtagBBBBB)、sizeof(structtagCCCC)是 在字节对齐为4下,sizeof(uniontagAAAA)、sizeof(structtagBBBBB)、sizeof(structtagCCCC)是 468881266、 structtagABC{charcB;shortsC;charcD;longlA;}*pAbc;pAbc=0x100000;那么pAbc+0x100=Ox ;(ULONG)pAbc+Ox1OO=Ox ;(ULONG*)pAbc+0x100=0x ;(char*)pAbc+0x100=0x ;100C00 100100 100400 10010067、 unsignedlongFUNC_C(unsignedlongulAction){unsignedlongulResult=0;switch(ulAction){caseACTION_A:{ulResult+=1;break;}caseACTION_B:{ulResult+=1;}default:{ulResult+=1;}}printf("ulResult=%u",ulResult);returnulResult;}当输入为ACTION_B时,输出结果为:ulResult= ;268、 下面的代码中,函数Test执行完毕后,打印的结果是 unsignedlongg_ulGlobal=0;voidGlobalInit(unsignedlongulArg){ulArg=0x01;return;}voidTest(){GlobalInit(g_ulGlobal);printf("%lu",g_ulGlobal);return;}069、 以下程序的输出的结果是 intx=3;voidincre();voidmain(){inti;for(i=1;i<x;i++){incre();}return;voidincre(){staticintx=1;x*=(x+1);printf("%d",x);return;}2670、以下程序的输出的结果是 #pragmapack(4)/*四字节对齐*/intmain(intargc,char*argv[]){unsignedcharpuc[4];structtagPIM{unsignedcharucPim1;unsignedcharucData0:1;unsignedcharucData1:2;unsignedcharucData2:3;}*pstPimData;pstPimData=(structtagPIM*)puc;memset(puc,0,4);pstPimData->ucPim1=1;pstPimData->ucData0=2;pstPimData->ucData1=3;pstPimData->ucData2=4;printf("%02X%02X%02X%02X\n",puc[0],puc[1],puc[2],puc[3]);return0;}#pragmapack()/*恢复缺省对齐方式*/0126000071、 enumNEW_SERV_ID{NSID_SERV_NULL=0,NSID_SERV254=254,NSID_SERV255,NSID_BUTT};unsignedcharGetNsid(charnsid){return(nsid);}GetNsid(NSID_SERV_NULL)= ;GetNsid(NSID_SERV255)= ;GetNsid(NSID_BUTT)=__.0,255,0三、指出下列程序中导致不能出现预期结果的唯一错误(不考虑编程规范错误)72、 下面程序把"hello"这个字符串输出,请指出其中的错误。voidTest(void){charpcArray[10];strncpy(pcArray,"hello",5);printf("%s\n",pcArray);return;}strncpy没有把中止符NULL写入数组中73、 如下程序用于把"系统备板工作异常"字符串打印出来,请指出其中的错误:voidPrintErrInfo(void){characMsg[16];strcpy(acMsg,"系统备板工作异常");printf("%s",acMsg);return;}每个汉字占两个字节,空间不足,字符串结尾还有'\0'74、 如下函数实现打印字符串"helloworld"的功能,请指出错误:#defineBUFFER_SIZE256voidGetMemory(char*pszBuf){if(NULL==pszBuf){ASSERT(0);return;pszBuf=(char*)malloc(BUFFER_SIZE);return;}voidTest(void){char*pszBuf=NULL;GetMemory(pszBuf);if(NULL==pszBuf){return;}strcpy(pszBuf,"helloworld\r\n");printf("%s",pszBuf);free(pszBuf);return;}函数要返回指针就需要传进去指针的地址75、 如下函数实现打印字符串"helloworld"的功能,请指出错误:char*GetMemory(void){charpcBuf[]="helloworld\r\n";returnpcBuf;}voidTest(void){char*pcStr=NULL;pcStr=GetMemory();if(NULL==pcStr){printf("Cannotgetstring!\r\n");return;}else{printf("%s",pcStr);}retur

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论