- 相关推荐
12个常见C语言面试题及答案(3)
printf("\n [%c] \n",*ptr);
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
3月计算机二级C语言真题及答案(完整版)08-26
c语言实习总结06-30
c语言读书笔记09-28
职称英语卫生类c级考试真题及答案(3)10-12
英语面试常见的问题及答案10-29