Chinaunix首页 | 论坛 | 博客
  • 博客访问: 33885
  • 博文数量: 22
  • 博客积分: 301
  • 博客等级: 二等列兵
  • 技术积分: 250
  • 用 户 组: 普通用户
  • 注册时间: 2010-04-12 15:30
文章分类

全部博文(22)

文章存档

2019年(4)

2014年(1)

2013年(7)

2011年(8)

2010年(2)

分类: C/C++

2019-03-08 15:59:16

1. 下述哪种代码写法是正确的:
(1)
char *error_msg = "Resource not available to user.";
int error_type = 3;
/* ...do something... */
printf("Error (type %s): %d\n", error_type, error_msg);
(2)
struct sParam
{
    int num;
    char msg[100];
    int result;
};
struct sParam tmp = {10, "hello Baby!", 0};
char *errormsg = "Resource not available to user.";
int errortype = 3;
/* ...do something... */
if (tmp.result == 0)
{
    printf("Error Param: %s \n", tmp);
}
(3)
char *error_msg = "Resource not available to user.";
int error_type = 3;
printf("Error (type %d): %s\n", error_type);
(4)
void Compliant(char *user, char *password)
{
    char input[1000];
    if (fgets(input, sizeof(input)-1, stdin) == NULL)
    {
        /* handle error */
    }
    input[sizeof(input)-1] = ’\0’;
    printf(“%s”, input);
}
A. (1)


B. (2)


C. (3)


D. (4)


你的答案: D正确答案 D
解析:无




2. 以下哪种措施不可以避免内存操作越界
A. 数组的大小要考虑最大情况,避免数组分配空间不够


B. 字符串操作过程中使用strncpy_s()来代替strncpy(),保证结尾含有结束符


C. 把数据复制到固定长度的内存前必须检查边界


D. 通过手工计算结构/字符串长度


你的答案: D正确答案 D
解析:无




3. 下面标识符的命名正确的是
A. int nerr


B. int n


C. int number_of_completed_connection


D. int a_com_conns


你的答案: C正确答案 C
解析:无




4. 防止SQL注入的方法不包括下面的
A. 预处理参数化查询


B. 对不可信数据进行校验(推荐“黑名单”校验)


C. 对不可信数据中的SQL特殊字符进行转义


D. ODBC驱动参数化查询


你的答案: B正确答案 B
解析:无




5. 下面关于申请内存的说法错误的是
A. 使用0字节长度去申请内存的行为是没有定义的,在引用内存申请函数返回的地址时会引发不可预知或不能立即发现的问题


B. 使用负数长度去申请内存,负数会被当成一个很大的无符号整数,从而导致因申请内存过大而出现失败


C. 有些函数如calloc分配出来的内存是没有初始化的,可以使用memset_s()进行清零,或者使用malloc()进行内存分配,malloc()分配的内存是清零的


D. 重复释放内存(double-free)会导致内存管理器出现问题。重复释放内存在一定情况下,有可能导致“堆溢出”漏洞,可以被用来执行恶意代码,具有很大的安全隐患


你的答案: C正确答案 C
解析:无


6. 如果a.c只对外提供一个void bar()函数作为接口,而bar函数的实现部分需要使用b.c中的void foo()函数,以下做法中正确的是
A. 在b.h中声明extern void foo(),在a.h中#include b.h


B. 在b.h中声明extern void foo(),在a.c中#include b.h


C. 在b.h中声明extern void foo(),在a.c中声明extern void foo()


D. 在b.c中声明extern void foo(),在a.c中声明extern void foo()


你的答案: B正确答案 B
解析:无




7. 下面关于文件输入/输出说法错误的是
A. 必须使用int类型来接收字符输入/输出函数的返回值


B. 文件路径验证前,必须对其进行标准化,Windows下可以使用realpath()函数


C. 创建文件时必须显式指定合适的文件访问权限


D. 访问文件时尽量使用文件描述符代替文件名作为输入,以避免竞争条件问题


你的答案: B正确答案 B
解析:无




8. 如果函数foo仅在a.c内可见,则应当如下声明
A. 在a.c的头部声明 int foo(void);


B. 在a.c的头部声明 static int foo(void);


C. 在a.h的头部声明 static int foo(void);


D. 在a.c的头部声明 extern int foo(void);


你的答案: B正确答案 B
解析:无




9. 下面说法正确的是
A. 运算时使用<<=、<<操作符运算时不会出现反转


B. 在使用像memcpy、strcpy、strncpy、sscanf()、sprintf()、snprintf()和wcstombs()这样的函数时,必须检查源地址和目的地址是否存在重叠的内存区域


C. 调用格式化I/O函数时,可以直接或者间接将用户输入作为格式化字符串的一部分


D. 申请内存的函数可以使用 malloc、calloc及 realloc


你的答案: B正确答案 B
解析:无




10. 下面哪个是Windows平台下推荐使用随机数生成的方法
A. 使用CryptGenRandom()函数


B. 使用C标准库函数rand()


C. 使用C标准库函数random()


D. 读取/dev/random文件来获取真随机数


你的答案: A正确答案 A
解析:无


11. 如果a.c包含了头文件a.h,a.h包含了头文件b.h,b.c也包含了b.h,那么当b.h发生改变时,哪些文件将会被重新编译
A. b.c


B. a.h


C. a.c和a.h


D. a.c和b.c


你的答案: D正确答案 D
解析:无




12. 下列关于头文件或宏的描述错误的是
A. 每一个.c文件应有一个同名.h文件,用于声明需要对外公开的接口,同时.c/.h文件禁止包含用不到的头文件


B. 除了头文件或编译开关等特殊标识定义,宏定义不能使用下划线‘_’开头和结尾


C. 使用宏时允许参数发生变化


D. 宏定义中尽量不使用return、goto、continue、break等改变程序流程的语句


你的答案: C正确答案 C
解析:无




13. 关于程序效率的规范要求,哪一项描述是错误的
A. 应该把执行概率较大的分支放在if else判断后面处理


B. 通过对数据结构、程序算法的优化来提高效率


C. 创建资源库(线程池、内存池),以减少分配对象的开销


D. 对于多维大数组,避免来回跳跃式访问数组成员


你的答案: A正确答案 A
解析:无




14. 下面说法错误的是
A. 删除或修改没有效果的代码


B. 程序中要及时清除存储在可复用资源中的敏感信息


C. 禁止访问已经释放的内存


D. 非动态申请的内存也可以使用free手动释放


你的答案: D正确答案 D
解析:无




15. 关于const的描述错误的是
A. const int A=1;定义了一个整型常量A,值为1, 在任何时候值都不可变


B. const char * A="abc";指针A指向的内容不可变


C. char * const A="abc";指针A指向的内容不可变


D. const char * const A="abc";指针A和指向的内容都不可变


你的答案: C正确答案 C
解析:无


16. 以下关于安全编码的说法,错误的是
A. 无论是明文口令还是密文口令,都应该禁止保存在日志文件中


B. 删除或修改一些即使执行后、也不会有任何效果的代码


C. 字符串/内存操作函数的源指针和目标指针可以指向内存重叠区


D. 避免对有符号整数进行位操作符运算


你的答案: C正确答案 C
解析:无




17. 下列关于整数的操作正确的是:(INT32表示32位有符号整数,UINT32表示32位无符号整数,INT8表示8位有符号整数)
(1)
INT32 Func(UINT32 ui1, UINT32 ui2, UINT32 * ret)
{
   if( NULL == ret )
   {
       return ERROR;
   }
   if((UINT_MAX - ui1) < ui2)
   {
       return ERROR;
   }
   else
   {
       *ret = ui1+ ui2;
   }
   return OK;
}
(2)
INT32 Func(INT32 si1, INT32 si2, INT32 *ret)
{
  if ( NULL == ret )
  {
    return ERROR;
  }
  *ret = si1 * si2;
  return OK;
}
(3)
INT32  Func(UINT32 ui, INT8 *ret)
{
  if( NULL == ret )
  {
    return ERROR;
  }
  *ret = (INT8)ui;
  return (OK);
}
(4)
#define BUF_SIZE 10
int main(int argc, char* argv[])
{
  int length;
  char buf[BUF_SIZE];
  if (argc != 3)
  {
    return -1;
  }
  length = atoi(argv[1]);
  if (length < BUF_SIZE)
  {
    memcpy(buf, argv[2], length);
    printf("Data copied\n");
  }
  else
  {
    printf("Too many data\n");
  }
}
A. (1)


B. (2)


C. (3)


D. (4)


你的答案: A正确答案 A
解析:无




18. 下面哪个算法是禁止使用的弱加密算法
A. SHA2


B. RSA


C. DSA


D. DES


你的答案: D正确答案 D
解析:无




19. 对于字符串"zyxstqw0"使用多大字符数组进行存储最为合适
A. 8


B. 9


C. 10


D. 16


你的答案: B正确答案 B
解析:无




20. 关于宏定义,哪些描述是错误的
A. 宏定义中尽量不使用return、goto、continue、break等改变程序流程的语句


B. 用宏定义表达式时,要使用完备的括号


C. 除非必要,应尽可能使用宏代替函数


D. 将宏所定义的多条表达式放在大括号中


你的答案: C正确答案 C
解析:无


阅读(4856) | 评论(0) | 转发(0) |
0

上一篇:这样学习C语言最有效

下一篇:练习题3

给主人留下些什么吧!~~