12个常见C语言面试题及答案(3)

时间:2024-07-22 20:02:02 学人智库 我要投稿
  • 相关推荐

12个常见C语言面试题及答案(3)

  printf("\n [%c] \n",*ptr);

12个常见C语言面试题及答案(3)

  return 0; }

  答:输出结果应该是这样:

  [L] [i]

  因为“++”和“*”的优先权一样,所以“*ptr++”相当于“*(ptr++)”。即应该先执行ptr++,然后才是*ptr,所以操作结果是“L”。第二个结果是“i”。

  9.问:修改代码片段(或者只读代码)

  问:下面的代码段有错,你能指出来吗?

  #include int main(void) {

  char *ptr = "Linux";

  *ptr = 'T';

  printf("\n [%s] \n", ptr);

  return 0; }

  答:这是因为,通过*ptr = ‘T’,会改变内存中代码段(只读代码)“Linux”的第一个字母。这个操作是无效的,因此会造成seg-fault或者崩溃。

  10.会改变自己名字的进程

  问:你能写出一个在运行时改变自己进程名的程序吗?

  答:参见下面这段代码:

  #include int main(int argc, char *argv[]) {

  int i = 0;

  char buff[100];

  memset(buff,0,sizeof(buff));

  strncpy(buff, argv[0], sizeof(buff));

  memset(argv[0],0,strlen(buff));

  strncpy(argv[0], "NewName", 7);

  // Simulate a wait. Check the process // name at this point. for(;i<0xffffffff;i++);

  return 0; }

  11.返回本地变量的地址

  问:下面代码有问题吗?如果有,该怎么修改?

  #include int* inc(int val) {

  int a = val;

  a++;

  return &a; } int main(void) {

  int a = 10;

  int *val = inc(a);

  printf("\n Incremented value is equal to [%d] \n", *val);

  return 0; }

  答:尽管上面的程序有时候能够正常运行,但是在“inc()”中存在严重的漏洞。这个函数返回本地变量的地址。因为本地变量的生命周期就是“inc()”的生命周期,所以在inc结束后,使用本地变量会发生不好的结果。这可以通过将main()中变量“a”的地址来避免,这样以后还可以修改这个地址存储的值。

  12.处理printf()的参数

  问:下面代码会输出什么?

  #include int main(void) {

  int a = 10, b = 20, c = 30;

  printf("\n %d..%d..%d \n", a+b+c, (b = b*2), (c = c*2));

  return 0; }

  答:输出结果是:

  110..40..60

  这是因为C语言里函数的参数默认是从右往左处理的,输出时是从左往右。

【12个常见C语言面试题及答案(3)】相关文章:

java面试题及答案10-03

计算机二级c语言考试习题及答案07-03

名校英语面试经典常见的面试题10-21

经典常见面试题分析解答08-14

计算机二级C语言考试选择题(带答案)(3)10-23

3月计算机二级C语言真题及答案(完整版)08-26

c语言实习总结06-30

c语言读书笔记09-28

职称英语卫生类c级考试真题及答案(3)10-12

英语面试常见的问题及答案10-29