c语言 xff占几个字节,C语言编程基础题库

一.选择:

1.给出以下定义:

char acX[ ]= "abcdefg";

char acY[ ]= {'a','b','c','d','e','f','g'};

则正确的叙述为(  )

A) 数组acX和数组acY等价              B) 数组acX和数组acY的长度相同

C) 数组acX的长度大于数组acY的长度    D) 数组acX的长度小于数组acY的长度

答案:C

2.

void example(char acHello[])

{

printf("%d", sizeof(acHello));

return;

}

void main()

{

char acHello[] = "hello";

example(acHello);//数组名称作参数,传的是地址,一个地址占四个字节

return;

}

的输出是

A 4     B 5         C 6      D不确定

答案:A

3. 有以下程序段

char   acArr[]= "ABCDE";

char   *pcPtr;

for(pcPtr = acArr; pcPtr < acArr + 5; pcPtr++)

{

printf("%s/n", pcPtr);

}

return;

输出结果是(  )

A) ABCD         B) A              C) E              D) ABCDE

B                 D                 BCDE

C                 C                 CDE

D                 B                 DE

E                 A                 E

答案:D

4.在中断中,不能同步获取信号量,但是可以释放信号量。

A.正确  B.错误

答案:A

5.以下叙述中不正确的是(  )

A) 在不同的函数中可以使用相同名字的变量

B) 函数中的形式参数是局部变量

C) 在一个函数内定义的变量只在本函数范围内有效

D) 在一个函数内的复合语句中定义的变量在本函数范围内有效(复合语句指函数中的成对括号构成的代码)

答案:D

6.设有如下定义:

unsigned long pulArray[] = {6, 7, 8, 9, 10};

unsigned long *pulPtr;

则下列程序段的输出结果为(   )

pulPtr = pulArray;

*(pulPtr + 2) += 2;

printf ("%d,%d/n", *pulPtr, *(pulPtr + 2));

A)8,10         B)6,8            C)7,9             D)6,10

答案:D

7. 定义结构体时有下面几种说法,请指出正确的(多选):______

A、结构体中的每个部分,最好进行四字节对齐;

B、结构体的总长度最好是四字节对齐;

C、结构中成员的存放不用考虑字节对齐情况;

答案:A、B

8.void example()

{

int i;

char  acNew[20];

for(i = 0; i < 10; i++)

{

acNew[i] = '0';

}

printf("%d/n", strlen(acNew));

return;

}

的输出为(   )

A 0     B 10         C 11      D不确定

答案:D

9.switch(c)中的c的数据类型可以是char、long、float、unsigned、bool. (    )

A. 正确   B. 错误

答案:B

10. 网络上传输的字节序默认是大字节的,如果主机是小字节序,在网络通信时则须进行字节序转换;如果主机是

大字节序,为了程序的一致性及可移植性,最好也在程序中加上字节序转换的操作(空操作)。

A. 正确  B.错误

答案:A

11. struct stu

{

int      num;

char     name[10];

int      age;

};

void fun(struct stu *p)

{

printf("%s/n", (*p).name);

return;

}

void main()

{

struct  stu   students[3]={ {9801,"Zhang",20},

{9802,"Wang",19},

{9803,"Zhao",18} };

fun(students + 2);

return;

}

输出结果是(   )

A) Zhang        B)Zhao        C) Wang           D) 18

答案:B

12.以下程序运行后,输出结果是(   )

void main(  )

{

char *szStr = "abcde";

szStr += 2;

printf("%lu /n",szStr);

return;

}

A cde                                    B 字符c的ASCLL码值

C "abcde"这个常串中字符c所在的地址       D 出错

答案:C

13. 在X86下,有下列程序

#include

void main()

{

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) 不可预知

答案:D

14. 全局变量可以定义在被多个.C文件包含着的头文件中。

A. 正确   B. 错误

答案:B

15.void example()

{

int i;

char  acNew[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;

}

的输出为:

A 0     B 10         C 11      D不确定

答案:B

16.下列定义正确的有(多选):(   )

A: char *pcPtr   = "abcd";

B: char  pc[4]= "abcd";

C: char  pc[]  = "abcd";

D: char  pc[]  = 'abcd';

E: char  pc[]  = {'a','b','c','d','/0'};

F: char  pc[]  = 'a' 'b' 'c' 'd';

答案:ACE

17.在函数内部定义的变量(静态变量、寄存器变量等特殊变量除外)的内存是在栈内存中,所以在定义函数内部的变量的时候,一定要保证栈不能够溢出。如果临时变量

占用空间较大,应该使用内存申请的方式,这样该变量指向的内存就是在堆内存中了。

A. 正确  B. 错误

答案:A

18.局部变量可以和全局变量重名,编译的时候不会出现错误,但一旦不小心,就可能导致使用错误变量,所以在定时局部变量的时候,不要和全局变量重名。

A. 正确  B. 错误

答案:A

19.设有以下宏定义:

#define      N         3

#define      Y(n)      ((N+1)*n) /*这种定义在编程规范中是严格禁止的*/

则执行语句:z = 2 * (N + Y(5 + 1));后,z的值为(   )

A) 出错        B) 42           C) 48            D)54

答案:C

20. int *(*ptr)();

则以下叙述中正确的是(   )

A) ptr是指向一维组数的指针变量

B) ptr是指向int型数据的指针变量

C) ptr是指向函数的指针,该函数返回一个int型数据

D) ptr是指向函数的指针,该函数的返回值是指向int型数据的指针

答案:D

21. 0x12345678 在采用BigEndian中内存的排列顺序是______,在采用LittleEndian内存中的排列顺序是_______.

(答案从左到右内存地址依次增加)

A.12 34 56 78                               B.34 12 78 56

C.78 56 34 12                               D.56 78 12 34

答案:A C

二、填空:

1. .struct tagAAA

{

unsigned char ucId:1;

unsigned char ucPara0:2;

unsigned char ucState:6;

unsigned char ucTail:4;

unsigned char ucAvail;

unsigned char ucTail2:4;

unsigned long ulData;

}AAA_S;

问:AAA_S在字节对齐分别为1、4的情况下,占用的空间大小是多少?

答案:9  12

2.typedef struct tagTest

{

UCHAR  ucFlag;

ULONG  ulLen;

}TEST_S;

TEST_S test[10];

四字节对齐方式时: sizeof(TEST_S) = ______, sizeof(test)________.

答案:8   80

3

char acHello[] = "hello/0world";

char acNew[15] = {0};

strcpy(acNew,acHello);

strlen(acNew) = _____

sizeof(acHello) = ______

答案:5   12

4.#pragma pack(4)/*编译选项,表示4字节对齐*/

int main(int argc, char* argv[])

{

struct tagTest1

{

short a;

char d;

long b;

long c;

};

struct tagTest2

{

long b;

short c;

char d;

long a;

};

struct tagTest3

{

short c;

long b;

char d;

long a;

};

struct tagTest1 stT1;

struct tagTest2 stT2;

struct tagTest3 stT3;

printf("%d %d %d", sizeof(stT1), sizeof(stT2), sizeof(stT3));

return 0;

}

#pragma pack()(编译选项结束)

请问输出结果是:_________

答案:12   12   16

5. enum ENUM_A

{

X1,

Y1,

Z1 = 5,

A1,

B1

};

enum ENUM_A enumA = Y1;

enum ENUM_A enumB = B1;

请问 enumA = ____; enumB = ______;

答案:1   7

6.以下程序的输出结果是________.

#include    

int fun(int   x,int  y)

{

static  int   m = 0;8

static  int   i = 2;3

i += m + 1;12

m = i + x + y;

return  m;

}

void main()

{

int   j = 4;

int   m = 1;

int   k;

k = fun(j, m);

printf("%d,", k);

k=fun(j, m);

printf("%d/n", k);

return;

}

答案:8   17

7.以下程序的输出结果为________

#define CIR(r) r*r /*请注意这种定义的缺陷,不允许这么定义*/

void main()

{

int a = 1;

int b = 2;

int t;

t = CIR(a + b);

printf("%d/n", t);

return;

}

答案:5

8.在VRP中,实现了strncpy类似的函数,定义如下:

#define CHAR char

#define ULONG unsigned long

#define VOID void

#define MACRO_COPYWORLDLENGTH  4

CHAR *VOS_strncpy(CHAR *pcDest, const CHAR *szSrc, ULONG ulLength)

{

CHAR *pcPoint = pcDest;

if(( NULL == szSrc ) || ( NULL == pcDest ) ))

{

return NULL;

}

while(ulLength && (*pcPoint = *szSrc))/*这里采用了在判断语句中赋值的方式(*pcPoint = *szSrc),建议尽量不使用*/

{

pcPoint++;

szSrc++;

ulLength--;

}

if(!ulLength)

{

*pcPoint = '/0';

}

return pcDest;

}

VOID main(VOID)

{

CHAR szStrBuf[ ] = "1234567890";

CHAR szStrBuf1[ ] = "1234567890";

CHAR *szHelloWorld = "Hello World!";

strncpy(szStrBuf, szHelloWorld, MACRO_COPYWORLDLENGTH);

VOS_strncpy(szStrBuf1, szHelloWorld, MACRO_COPYWORLDLENGTH);

printf("%s %s", szStrBuf, szStrBuf1);

}

程序的输出结果为________

答案:Hell567890 Hell

9.

char acHello[] = "hello/0world";

char acNew[15] = {0};

memcpy(acNew,acHello,12);

strlen(acNew) = _____

sizeof(acHello) = _____

答案:5  12

10. typedef struct Head

{

UCHAR  aucSrc[6];

ULONG  ulType;

} HEAD_S;

在强制一字节对齐情况下,请指出sizeof(HEAD_S) = ________;

在强制二字节对齐情况下,请指出sizeof(HEAD_S) = ________;

在强制四字节对齐情况下,请指出sizeof(HEAD_S) = ________;

答案:10  10  12

11.union tagAAAA

{

struct

{

char  ucFirst;

short usSecond;

char  ucThird;

}half;

long  lI;

}number;

struct tagBBBBB

{

char  ucFirst;

short usSecond;

char  ucThird;

short usForth;

}half;

struct  tagCCCC

{

struct

{

char  ucFirst;

short usSecond;

char  ucThird;

}half;

long  lI;

};

在字节对齐为1下,sizeof(union tagAAAA)、sizeof(struct tagBBBBB)、sizeof(struct tagCCCC)是____  ____  _____

在字节对齐为4下,sizeof(union tagAAAA)、sizeof(struct tagBBBBB)、sizeof(struct tagCCCC)是____  ____  _____

答案:4   6   8

8   8   12

12.struct tagABC

{

char  cB;

short sC;

char  cD;

long  lA;

}*pAbc;

pAbc = 0x100000;

那么pAbc+0x100 = 0x_________; (ULONG)pAbc + 0x100 = 0x_________;(ULONG *)pAbc + 0x100 = 0x_________;(char *)pAbc + 0x100 = 0x_______;

答案:100C00  100100  100400  100100

13.unsigned long FUNC_C ( unsigned long ulAction )

{

unsigned long ulResult = 0 ;

switch ( ulAction )

{

case ACTION_A:

{

ulResult += 1 ;

break ;

}

case ACTION_B:

{

ulResult += 1 ;

}

default:

{

ulResult += 1 ;

}

}

printf( "ulResult = %u", ulResult ) ;

return ulResult ;

}

当输入为ACTION_B时,输出结果为: ulResult = _________;

答案:2(因为此分支没有break分支)

14.下面的代码中,函数Test执行完毕后,打印的结果是 _____。

unsigned long g_ulGlobal = 0;

void GlobalInit(unsigned long ulArg)

{

ulArg = 0x01;

return;

}

void Test()

{

GlobalInit(g_ulGlobal);

printf("%lu", g_ulGlobal);

return;

}

答案:0

15.以下程序的输出的结果是___________

int x = 3;

void incre();

void main()

{   int i;

for (i = 1; i < x; i++)

{

incre();

}

return;

}

void incre()

{

static   int  x = 1;

x *= (x + 1);

printf("%d ",x);

return;

}

答案:2   6

16.以下程序的输出的结果是___________

#pragma pack(4)/*四字节对齐*/

int main(int argc, char* argv[])

{

unsigned char puc[4];

struct tagPIM

{

unsigned char ucPim1;

unsigned char ucData0:1;

unsigned char ucData1:2;

unsigned char ucData2:3;

}*pstPimData;

pstPimData = (struct tagPIM *)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]);

return 0;

}

#pragma pack()/*恢复缺省对齐方式*/

答案:01   26   00   00

17.

char *pcColor = "blue1" ;

char acColor[] = "blue1" ;

strlen(pcColor) = _____

strlen(acColor) = _____

sizeof(pcColor) = _____

sizeof(acColor) = _____

答案:5   5   4   6

18.

char str[] = "///0";

char *p = str;

int  n = 1000;

请计算

sizeof (str ) = ____________

sizeof ( p ) = ______________

sizeof ( n ) =  ______________

答案:3   4   4

19.UCHAR *pucCharArray[10][10];

typedef union unRec

{

ULONG ulIndex;

USHORT usLevel[6];

UCHAR   ucPos;

}REC_S;

REC_S   stMax,*pstMax;

四字节对齐方式时: sizeof(pucCharArray) = __指针的数组,每个指针的地址都是4字节____, sizeof(stMax)=_______, sizeof(pstMax)=__地址______,sizeof(*pstMax)=________.

答案:400   12   4   12

20.typedef union unHead

{

UCHAR aucSrc [6];

struct tagContent

{

UCHAR ucFlag[3];

ULONG ulNext;

}Content;

}HEAD_S;

32CPU,VC编译环境下:

在强制一字节对齐情况下,请指出sizeof(HEAD_S) = ________;

在强制二字节对齐情况下,请指出sizeof(HEAD_S) = ________;

在强制四字节对齐情况下,请指出sizeof(HEAD_S) = ________;

答案:7   8   8

21.

UCHAR *pszTest  = "hello";

UCHAR aucTest[] = "hello";

请问 sizeof(pszTest) = _____ , sizeof(*pszTest) = ______, sizeof(aucTest) = ______.

答案:4   1    6

22.  struct BBB

{

long     lNum;

char     *pcName;

short    sDate;

char     cHa[2];

short    sBa[6];

}*p;

p = 0x100000;

p + 0x1 = 0x____

(unsigned long)p + 0x1 = 0x______

(unsigned long *)p + 0x1 = 0x______

(char *)p + 0x1 = 0x______

答案:100018 100001 100004 100001

23.在4字节对齐的情况:

typedef struct tagRec

{

long lA1;

char cA2;

char cA3;

long lA4;

long lA5;

} REC_S;

void main(int argc, char *argv[])

{

REC_S stMax ;

printf("/r/n sizeof(stMax)= %d",sizeof(stMax));

return;

}

输出结果为:

sizeof(stMax)=____

答案:16

24.void main ()

{

unsigned long ulA = 0x11000000;

printf("/r/n%x",*(unsigned char *)&ulA);

return;

}

输出结果为:

答案:0

三、指出下列程序中导致不能出现预期结果的唯一错误(不考虑编程规范错误)

1.下面程序用于输出用户输入的字符串。请指出其中的问题

#define OK              0

#define ERR             1

#define ERROR           (-1)

#define BUFFER_SIZE     256

int GetMemory(char **ppszBuf, int num)

{

if( NULL == ppszBuf )

{

ASSERT(0);

return ERROR;

}

*ppszBuf = (char *)malloc(num);

if(NULL == *ppszBuf)

{

return ERROR;

}

return OK;

}

void Test(void)

{

char *pcStr = NULL;

if(OK == GetMemory(&pcStr, BUFFER_SIZE))

{

scanf("%s",pcStr);/*这里假定BUFFER_SIZE足够大,不会导致越界*/

printf(pcStr);

free(pcStr);

}

return;

}

答案:要采用printf("%s", str)的形式打印,否则如果输入为%s, %d等形式可能会导致不可知现象。

2.此函数实现把32位IP地址(主机序)以字符串的方式打印出来,请找出代码中的错误:

char *IpAddr2Str(unsigned long ulIpAddr)

{

char szIpAddr[32];

(void)VOS_sprintf(szIpAddr, "%d.%d.%d.%d", ulIpAddr >> 24,

(ulIpAddr >> 16) & 0xff, (ulIpAddr >> 8) & 0xff, ulIpAddr & 0xff);

return szIpAddr;

}

答案:函数的局部变量是存放在堆栈中的,此函数返回了堆栈中的地址,函数退出后堆栈中的内容不可用。

3.如下程序用于输出"Welcome Home"。请指出其中的错误:

void Test(void)

{

char pcArray[12];

strcpy(pcArray,"Welcome Home");

printf("%s!", pcArray);

return;

}

答案:数组越界。

4.如下程序用于把"blue"字符串返回,请指出其中的错误:

char *GetBLUE(void)

{

char* pcColor ;

char* pcNewColor;

pcColor = "blue";

pcNewColor = (char*)malloc(strlen(pColor));

if(NULL == pcNewColor)

{

return NULL;

}

strcpy(pcNewColor, pcColor);

return pcNewColor;

}

答案:申请内存空间不足,字符串结尾还有'/0'。

5.下面程序期望输出str = hello world,请指出其中的错误:

char * GetStr(char *p)

{

p = "hello world";

return p;

}

void main()

{

char *str = NULL;

if(NULL != GetStr(str))

{

printf("/r/n str = %s",str);

}

return;

}

答案:无法返回字符串,参数使用错误。

6.如下代码实现如果两次调用FUNC_A函数的时间间隔超过TIME_INTERVAL毫秒,就执行一次DO_Something()操作。

请指出段代码中的错误:

#define ULONG unsigned long

#define TIME_INTERVAL  200

void DO_Something(void)

{

/*....*/

return;

}

void FUNC_A ( )

{

static ULONG ulPreCall = 0 ;

ULONG  ulNowInMsHigh = 0 ;

ULONG  ulNowInMsLow  = 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 ;

}

答案:没有判断时间的高位,ulNowInMsLow溢出后将不能执行到DO_Something。

7.下面的代码中,函数Test执行完毕后,希望输出1。请指出错误:

void VarInit(unsigned char *pucArg)

{

*pucArg = 1;

return;

}

void Test()

{

unsigned long ulGlobal;

VarInit(&ulGlobal);

printf("%lu", ulGlobal);

return;

}

答案:类型转换错误。

8.请指出下面程序错误的地方:

#define BUFFER_SIZE     256

void Test(void)

{

char *str = NULL;

str = (char *)malloc(BUFFER_SIZE);

if(NULL == str)

{

return;

}

strcpy(str, "hello");

free(str);

if(NULL != str)

{

strcpy(str, "world");

printf(str);

}

return;

}

答案:引用了已经释放的内存。

9.

#define OK              0

#define ERR             1

#define ERROR           (-1)

#define BUFFER_SIZE     256

char *GetMemory(unsigned long ulSize)

{

char *pcBuf = NULL;

. pcBuf = (char *)malloc(ulSize);

if(NULL == pcBuf)

{

return ERROR;

}

return pcBuf;

}

void Test(void)

{

char *pszBuf = NULL;

pszBuf = GetMemory(BUFFER_SIZE);

if(NULL != pszBuf)

{

strcpy(pszBuf, "Hello World!/r/n");

printf(pszBuf);

free(pszBuf);

}

return;

}

答案:GetMemory函数的异常分支返回了-1,是一个非法地址。

10.下面程序用于输出用户输入的字符串。请指出其中的问题

#define OK              0

#define ERR             1

#define ERROR           (-1)

#define BUFFER_SIZE     256

int GetMemory(char **ppszBuf, int num)

{

if( NULL == ppszBuf )

{

ASSERT(0);

return ERROR;

}

*ppszBuf = (char *)malloc(num);/*调用系统函数申请内存*/

if(NULL == *ppszBuf)

{

return ERROR;

}

return OK;

}

void Test(void)

{

char *pcStr = NULL;

if(OK == GetMemory(&pcStr, BUFFER_SIZE))

{

scanf("%s",pcStr);/*这里假定BUFFER_SIZE足够大,不会导致越界*/

printf(pcStr);

free(pcStr);

}

return;

}

答案:要采用printf("%s", szStr)的形式打印,否则如果输入为%s, %d等形式可能会导致不可知现象。

11.下面程序把"hello"这个字符串输出,请指出其中的错误。

void Test(void)

{

char pcArray[10];

strncpy(pcArray,"hello",5);

printf("%s/n",pcArray);

return;

}

答案:strncpy没有把中止符NULL写入数组中。

12.如下程序用于把"hello world"字符串打印出来,请指出其中的错误:

void example(void)

{

char acColor[11];

strcpy(acColor,"hello world");

printf("%s",acColor);

return;

}

答案:空间不足,字符串结尾还有'/0'。

13.如下程序用于把"系统备板工作异常"字符串打印出来,请指出其中的错误:

void PrintErrInfo(void)

{

char acMsg[16];

strcpy(acMsg,"系统备板工作异常");

printf("%s",acMsg);

return;

}

答案:每个汉字占两个字节,空间不足,字符串结尾还有'/0'。

14.请指出下面程序的错误:

void Test(void)

{

char *szStr = (char *) malloc(100);

if(NULL == szStr)

{

return;

}

strcpy(szStr, "hello");

free(szStr);

if(NULL != szStr)

{

strcpy(szStr, "world");

printf(szStr);

}

return;

}

答案:使用了无效内存。

15.如下函数实现打印字符串"hello world"的功能,请指出错误:

#define BUFFER_SIZE     256

void GetMemory(char *pszBuf)

{

if(NULL == pszBuf)

{

ASSERT(0);

return ;

}

pszBuf = (char *)malloc(BUFFER_SIZE);

return;

}

void Test(void)

{

char *pszBuf = NULL;

GetMemory(pszBuf);

if(NULL == pszBuf)

{

return ;

}

strcpy(pszBuf, "hello world/r/n");

printf("%s", pszBuf);

free(pszBuf);

return;

}

答案:函数要返回指针就需要传进去指针的地址。

16.如下函数实现打印字符串"hello world"的功能,请指出错误:

char *GetMemory(void)

{

char pcBuf[] = "hello world/r/n";

return pcBuf;

}

void Test(void)

{

char *pcStr = NULL;

pcStr = GetMemory();

if(NULL == pcStr)

{

printf("Can not get string!/r/n");

return;

}

else

{

printf("%s", pcStr);

}

return;

}

答案:要打印的字符串存在于栈内存,可能不会正确打印。

17. 如下程序用于把"blue"字符串打印出来,请指出其中的错误:

void PrintBLUE()

{

char pcBlue[] = {'b','l','u','e'};

printf("%s",pcBlue);

return;

}

答案:字符串以'/0'结束。

18.下面程序用于输出用户输入的字符串。请指出其中的问题

#define OK              0

#define ERR             1

#define ERROR           (-1)

#define BUFFER_SIZE     256

int GetMemory(char **ppszBuf, int num)

{

if( NULL == ppszBuf )

{

ASSERT(0);

return ERROR;

}

*ppszBuf = (char *)malloc(num);

if(NULL == *ppszBuf)

{

return ERROR;

}

return OK;

}

void Test(void)

{

char *pcStr = NULL;

if(OK == GetMemory(&pcStr, BUFFER_SIZE))

{

scanf("%s",pcStr);/*这里假定BUFFER_SIZE足够大,不会导致越界*/

printf(pcStr);

free(pcStr);

}

return;

}

答案:要采用printf("%s", str)的形式打印,否则如果输入为%s, %d等形式可能会导致不可知现象。

19.下面程序把"blue"这个字符串输出,请指出其中的错误。

void PrintBLUE(void)

{

char* pcColor ;

char pcNewColor[5];

pcColor = "blue";

strncpy(pcNewColor, pcColor,4);

printf("%s",pcNewColor);

return;

}

答案:strncpy没有把中止符NULL写入数组中。

20.#define BUFFER_SIZE     256

void GetMemory(char **ppszBuf)

{

if(NULL == ppszBuf)

{

ASSERT(0);

return ;

}

*ppszBuf = (char *)malloc(BUFFER_SIZE);

return;

}

void Test(void)

{

char *pszBuf = NULL;

GetMemory(&pszBuf);

strcpy(pszBuf, "hello world/r/n");

printf("%s", str);

free(pszBuf);

return;

}

答案:malloc内存后没有判断是否成功。

21. 请指出下面程序问题

#define  MAX_LEN 256

unsigned char     Array[MAX_LEN];

int main(int argc, char *argv[])

{

int i;

for ( i = 0; i <= MAX_LEN; i++ )

{

Array[i] = i;

}

return;

}

答案:当i等于MAX_LEN时,数组越界。

22.请指出下面这段代码中的错误:

unsigned long FUNC_B ( unsigned long ulCount )

{

unsigned long ulSum = 0 ;

while( 0 <= ulCount )

{

ulSum += ulCount ;

ulCount--;

}

return ulSum ;

}

答案:unsigned long 永远不小于0,为死循环。

23.请指出下面程序的错误:

void GetMemory(char **ppcChar, int iLength)

{

if(NULL == ppcChar)

{

return;

}

*ppcChar = (char *)malloc(iLength);

return;

}

void Test(void)

{

char *szStr = NULL;

GetMemory(&szStr, 100);        if(NULL != szStr)    {        strcpy(szStr, "hello");        printf(szStr);    }    return;}答案:没有释放内存。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值