2024 华为笔试题及答案 1. 找 错 void test1() { char string[10]; char* str1=0123456789; strcpy(string, str1); } 答:表面上并且编译都不会错误。但假如 string 数组原意表示的是字符串的话,那这个赋值就没有达到意图。最好定义为 char string[11],这样最后一个元素可以存储字符串结尾符; void test2() { char string[10], str1[10]; for(int I=0; I 10;I++) { str1[I] =a; } strcpy(string, str1); } 答:strcpy 使用错误,strcpy 只有遇到字符串末尾的才会结束,而 str1 并没有结尾标志,导致 strcpy 函数越界访问,不妨让str1[9]=,这样就正常了。 void test3(char* str1) { char string[10]; if(strlen(str1) =10) { strcpy(string, str1); } } 答 : 这 又 会 出 现 第 一 道 改 错 题 的 错 误 了 。strlen(str1)算出来的值是不包含结尾符的,假如 str1 刚好为10 个 字 符 +1 结 尾 符 , string 就 得 不 到 结 尾 符 了 。 可 将strlen(str1) =10 改为 strlen(str1) 10。 2. 找 错 #define MAX_SRM 256 DSN get_SRM_no() { static int SRM_no; int I; for(I=0;I =MAX_SRM) return (NULL_SRM); else return SRM_no; } 答:我不知道这段代码的具体功能,但明显有两个错误 1,SRM_no 没有赋初值 2,由于 static 的声明,使该函数成为不可重入(即不可预测结果)函数,因为 SRM_no 变量放在程序的全局存储区中,每次调用的时候还可以保持原来的赋值。这里应该去掉 static 声明。 3. 写出程序运行结果 int sum(int a) { auto int c=0; static int b=3; c+=1; b+=2; return(a+b+c); } void main() { int I; int a=2; for(I=0;I 5;I++) { printf(%d,, sum(a)); } } 答:8,10,12,14,16 该题比较简单。只要注意 b 声明为static 静态全局变量,其值在下次调用时是可以保持住原来的`赋值的就可以。 4. int func(int a) { int b; switch(a) { case 1: b=30; case 2: b=20; case 3: b=16; default: b=0; } return b; } 则 func(1)=? 答:func(1)=0,因为没有 break 语句,switch 中会一直计算到 b=0。这是提醒我们不要忘了 break。呵呵。 5: int a[3]; a[0]=0; a[1]=1; a[2]=2; int *p, *q; p=a; q=a[2]; 则 a[qp]=? 答...