设为首页 加入收藏

TOP

C语言编程笔记丨12个有趣的C语言问答(二)
2019-03-28 14:09:32 】 浏览:200
Tags:语言编程 笔记 有趣 语言 问答
n Code segment

Q:以下代码运行时一定会崩溃,你能说出原因吗?

#include<stdio.h>

int main(void)

{

    char *ptr = "Linux";

    *ptr = 'T';

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

    return 0;

}

A:这是因为,通过 *ptr = ‘T’,此行代码尝试更改只读内存存储的字符串’Linux’。此操作当然行不通所以才会造成崩溃。

9,Process that changes its own name

Q:你能否写一个程序在它运行时修改它的名称?

A:以下代码可以完成

#include<stdio.h>

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;

}

10,局部变量的返回地址

Q:下面的代码有问题吗?如果有,如何修改?

#include<stdio.h>

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;

}

A:虽然上面的代码有时运行会很好,但是在方法 inc() 中有很严重的隐患。当inc()方法执行后,再次使用局部变量的地址就会造成不可估量的结果。解决之道就是传递变量a的地址给main()。

11,处理 printf() 参数

Q:以下代码输出请问是什么?

#include<stdio.h>

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;

}

A:输出将是

110..40..60

这是因为参数都是从右向左处理的,然后打印出来却是从左向右。

博主是一个有着7年工作经验的架构师,对于c++,自己有做资料的整合,一个完整学习C语言c++的路线,学习资料和工具。可以进我的Q群7418,18652领取,免费送给大家。希望你也能凭自己的努力,成为下一个优秀的程序员!另外博主的微信公众号是:C语言编程学习基地,欢迎关注!

 

首页 上一页 1 2 下一页 尾页 2/2/2
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇C语言字符数组回顾 下一篇C语言学习笔记丨带你五分钟了解指..

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目