C语言学习
文章平均质量分 79
XiyouLinux_Kangyijie
这个作者很懒,什么都没留下…
展开
-
关于函数那些事--C语言学习(1)
关于函数那些事–C语言学习(1)大家学习C语言一般的学校都会选择windows下的VC++6.0作为开发环境吧。VC本身确实很强大,在十几年前来看的话,这里不展开吐槽了。只是想说VC本身使用并不支持C99,更不用说C11了。而落后必然导致一些问题。在此只讲一个不安全的函数gets()及其解决方法tips:关于C99 啥的可以看一下ANSI C 我们先来看一下函数原型char *gets(原创 2016-06-12 17:40:48 · 576 阅读 · 1 评论 -
【内核】内核模块之helloworld
前言很早之前写过内核模块,前两天探究一个问题时又用到了,结果因为忘记了大部分知识又重新学了一遍,这次还是记录一下,以后就不用再查了。正文准备工作内核模块开发与普通应用开发完全不同,再也不是我们熟悉的stdio起手,main开写。而是单独的功能函数。所以我们要先安装依赖的函数库(内核代码)。以我的Fedora 29(kenel version 4.18.16-300.fc29.x86_6...原创 2019-05-01 15:19:28 · 948 阅读 · 0 评论 -
【C踩坑】多字节字符常量 的warning以及猜测
前言今天给1702班的娃们答疑,遇到了一个问题,当时很蒙,后来想了想就是之前的一个问题,当时解决了却忘了总结了,今天赶紧总结下。正文源程序是这样的(就作为我们的实验1)char a = '\0x41';printf("%x",a);结果是个31,emmmm看上去结果很有迷惑性,恩 其实我们只要在ASCII表里找一下0x31对应的值就好啦,是’1’。 那么我们再改成原创 2018-01-06 15:08:08 · 4641 阅读 · 1 评论 -
【标题党】记一个关于Redis-4.0.1版本下zslGetElementByRank函数的诡异问题
引子人在桌前坐,bug天上来。昨天早上到了小组,正准备总结一下爬山之旅,东哥就给我发了一个bug,让我也帮忙瞅瞅。。。bug描述是一个使用Redis跳跃表的demo,可以参照 东哥在RedisDB上的求助贴 东哥在StackOverFlow上的提问这个关于Redis的demo如下zskiplistNode* zslGetElementByRank(zskiplist *zsl, unsigned原创 2017-11-13 12:01:53 · 601 阅读 · 2 评论 -
链表趣题---快慢指针判断链表是否有环
前述五一假刷博客,看到师兄的快慢指针判断单向链表是否有环及找环入口 感觉真的非常神奇和有趣,今天在谈论Linux下的各种链表操作—list.h 想起了这个有趣的问题,给大家分享一波,结果在找入口时居然忘记了,还是要总结一波,不然真的容易忘。1.判断单向链表是否有环具体要求,空间复杂度O(1),时间复杂度O(N)思路快慢指针,从链表头开始,快指针每次走两个节点,慢指针每次一个节点,如果他们能相等(指向原创 2017-05-04 22:49:16 · 1536 阅读 · 0 评论 -
强制类型(结构体)转换NULL-----C指针的黑科技
一个头疼的例子(改写自Tencent—libco)#include<stdio.h>#include<string.h>typedef struct aa{ char a; int b; char o[3];}a;int main(void){ a test; memset(&test, 0, (long)(((a *)NULL)->o));}这个原创 2017-03-24 08:38:55 · 3769 阅读 · 2 评论 -
Container_of宏
Container_of宏#define offsetof(TYPE, MEMBER) ((size_t)&((TYPE *)0)->MEMBER)#define container_of(ptr, type, member) ({ \ const typeof( ((type *)0)->member )*__mptr = (ptr); \ (type *)(原创 2017-04-16 17:27:14 · 539 阅读 · 1 评论 -
【无脑教程】Fedora & CentOS下coredump文件生成方法
背景测试环境 Fedora 25&24 CentOS 7 目测 Deepin 并没有坑 而Ubuntu可能也存在这个问题(也有类似abrt的二进制文件)前言从Windows平台下转到到Linux下的C/C++开发可能第一个接触到的新名词就是段错误 也就是这样首先是一段神秘代码#include <stdio.h>int main(void){ char a[1]; char原创 2017-05-19 13:23:10 · 3233 阅读 · 0 评论 -
【GCC英文手册翻译】预处理器的系统特定预定义宏(The C preprocessor:System-specific Predefined Macros)
翻译自GCC英文手册–预处理器篇The C Preprocessor:System-specific Predefined Macros 3.7.3 系统特定的预定义宏 正常情况下,C预处理器会预定义几个宏来说明正在使用的系统类型和机器类型。 很明显,在每个GCC支持的目标(机器/系统)上,他们都是不同的。 这份手册是对于所有的系统和机器的,所以不能告诉你这些宏具体的名字是什么,但你可以使用翻译 2017-05-20 10:36:58 · 1283 阅读 · 0 评论 -
剑指小组2017----西邮Linux兴趣小组纳新面试题讲解(第17题)
17题 struct node{ char a; short b; int c;};int main(void){ struct node s; memset(&s, 0, sizeof(struct node)); s.a = 3; s.b = 5; s.c = 7; struct node *pt = &s;原创 2017-05-26 22:18:13 · 1102 阅读 · 0 评论 -
初识GTK--C语言学习(6)
吐槽好想回家。。。。GTK是啥通俗的说,一个库,用C语言写出图形界面。GTK和普通的C程序有啥区别我想这是新手上来最坑爹的了,因为现有的大部分教程都是给个例子(好长的代码)然后发一个实际的效果,只能通过模仿来达到类似的效果,却不知道怎么实现自己想要的效果。我的理解一个GTK的程序实际上是分三步的 1.声明变量 GTK里面的控件(widget)无论是按钮(button)标签(label),在声明时原创 2016-08-05 23:51:43 · 3140 阅读 · 0 评论 -
浅谈库,进程,线程---C语言学习(5)
前述最近要总结的东西好多,因为讲座讲了很多,但是感觉虽然面很广,但是理解的并不深入,本篇只是记录一下现在的理解,以后深入研究后再回来纠正吧。正文主要说说静态库和动态库,然后进程和线程只是说一些特殊的需要注意的地方吧。1.静态库 制作方法是将写好的函数先编译,然后用ar命令制作库。gcc -c fun.c -o libfun.o //编译生成目标文件ar rcvs libfun.a libfun.原创 2016-07-30 12:04:28 · 748 阅读 · 0 评论 -
简单点,switch-case的结构简单点~ C语言学习(4)
前言最近将进程看完了,但是感觉自己理解的还不是很全面,线程看不进去,就无聊看了后面的信号,看到了里面要用函数指针,自己对它一直是一知半解,翻看《C和指针》,想到了一些很有趣的东西。简化繁复的switch-case结构。函数指针C程序在调用函数时,都有一个函数入口,怎么找到这个入口呢,通过指针,每个函数名在被使用时都是由编译器转化为函数指针,从而找到函数的位置。switch-case的麻烦书上举了一个原创 2016-07-27 20:54:02 · 1835 阅读 · 0 评论 -
系统编程(文件操作)---C语言学习(2)
小感慨愉快的暑假留校学习开始啦,感慨一下,高考完了之后再次这样早起学习,一天过得格外快的日子好久没遇到了呢。。。前述暑假主要是学习LinuxC 还有系统的基本操作,今天主要看了文件操作,针对的都是一些系统调用函数。一天的学习快要结束了,趁着没忘赶紧总结一下吧。 首先说一下什么是系统调用,首先要纠正一个之前的错误观念,在做课设的时候有很多人都使用了system(“clear”)或者syst原创 2016-07-18 23:33:27 · 880 阅读 · 2 评论 -
系统编程(文件操作续)--C语言学习(3)
前述今天总结一下文件操作,主要包括两部分,文件描述符的控制和my_ls的实现。正文1.对文件描述符进行控制操作以改变一打开文件的属性,fcntl函数原型如下 int fcntl(int fd, int cmd); int fcntl(int fd, int cmd, long arg ); int fcntl(int fd, int cmd, struct flock *原创 2016-07-20 22:56:52 · 748 阅读 · 0 评论 -
【踩坑】链接第三方动态库
前言每一个今天你绕过去不填的坑,都会在未来等着你。—哲·士沃硕德正文一个C/C++程序从源码到可执行文件都需要经过 预处理-编译-汇编-链接 这几个过程,当然现在只需要gcc x.c就可以了,而不需要我们去执行具体的cpp等程序了,非常的方便。回到今天的case上来,当我们需要编写一个依赖第三方库的程序时,该如何gcc x.c呢?以Redis的C客户端hiredis为例,让我们看一下它...原创 2019-07-21 20:53:00 · 653 阅读 · 0 评论