C
52coder
道貌何其深,岸然唯我真
展开
-
C语言基础知识总结
本文的目的是记录平时工作学习过程中学习到的C语言知识,由于单独一篇文章记录的话可能篇幅过少,因此置顶此文用作此用处,本文从2017-12-16开始记录,后续新增内容不单独列出时间,在MarkEditor中有相应的版本记录。文件描述符EOF(end of file)文件结束,参考如下代码:#include <stdio.h>int main(){ int c; while((c =原创 2017-12-28 23:59:10 · 4490 阅读 · 0 评论 -
排序算法总结
排序就是将一组对象按照某种逻辑顺序重新排列的过程,本文是记录学习排序的总结,持续更新,计划一周时间,视工作忙与否而定。选择排序算法思路: 首先找到数组中的最小元素,其次将它和数组的第一个元素交换位置。再次在剩下的元素中找到最小元素,将它与数组的第二个元素交换位置。如此反复,直到将整个数组排序。 算法实现:#include <stdio.h>void SelectionSort(int a[],原创 2017-11-14 00:07:50 · 342 阅读 · 0 评论 -
算法概论
本文是算法概论读书笔记,算法概论这本书在豆瓣评分高达9分,在收到学弟寄来的这本书我随手翻了几页就被书中所述内容所吸引,因此本文持续记录书中对于我来说比较有意思又或者我之前理解不深刻或错误的地方。序言序言部分从费波那奇数列介绍开始,引入费波那奇数列的递归实现,接着分析递归实现算法慢的原因,因为很多求解步骤都是重复的。一种更合理的机制是随时存储中间计算结果。 C语言实现:#include <stdio原创 2017-11-14 00:06:34 · 2111 阅读 · 0 评论 -
TLPI-Chapter 20 信号
基本概念信号是事件发生时对进程的通知机制。有时也称为软件中断,信号与硬件中断相似之处在于打断了程序执行的正常流程,大多数情况下,无法预测信号到达的精确时间。 一个具有合适权限的进程能够向另一进程发送信号,信号的这一用法可作为一种同步技术,甚至是进程通信IPC的原始形式。进程也可以向自身发送信号。然而发往进程的诸多信号,通常都是源于内核。 引发内核为进程产生信号的各类事件如下: 硬件发生异常:硬原创 2017-11-18 17:12:25 · 415 阅读 · 0 评论 -
指针数组与数组指针
指针数组:array of pointers,即用于存储指针的数组,也就是数组元素都是指针 数组指针:a pointer to an array,即指向数组的指针 还要注意的是他们用法的区别,下面举例说明。 int* a[4] 指针数组 表示:数组a中的元素都为int型指针 元素表示:a[i] (a[i])是一样的,因为[]优先级高于*int (*a)[4] 数组指针 表原创 2017-11-18 17:10:49 · 308 阅读 · 0 评论 -
TLPI-Chapter 13文件I/O缓冲
函数:void *memalign(size_t alignment, size_t size); The obsolete function memalign() allocates size bytes and returns a pointer to the allocated memory. The memory address will be a multiple of alignment原创 2017-10-29 18:03:29 · 319 阅读 · 0 评论 -
旋转字符串
题目描述 给定一个字符串,要求把字符串前面的若干个字符移动到字符串的尾部,如把字符串“abcdef”前面的2个字符’a’和’b’移动到字符串的尾部,使得原字符串变成字符串“cdefab”。请写一个函数完成此功能,要求对长度为n的字符串操作的时间复杂度为 O(n),空间复杂度为 O(1)。暴力移位法初看此题,可能最先想到的方法是按照题目所要求的,把需要移动的字符一个一个地移动到字符串的尾部,如此我们原创 2017-10-29 01:31:36 · 394 阅读 · 0 评论 -
关于 Markdown
Markdown 会被解释为一种 “标记语法”,实际上,可以不用去理解这种看似晦涩的意思。 Markdown 接近于普通文本,另外再由少数几个语法规则描述文本结构的一种约定方式;而且花很少的时间,就能很容易掌握的技巧。 换一种说法,Markdown 是给专注于“偷懒”,却不牺牲最终产出的人群使用的。基本语法标题# 一级标题## 二级标题### 三级标题#### 四级标题####原创 2017-10-27 00:11:45 · 252 阅读 · 0 评论 -
C程序经典程序集锦(一)
集锦一:#include <stdio.h>int array[]={23,34,12,17,204,99,16};#define TOTAL_ELEMENTS (sizeof(array)/sizeof(array[0]))int main(){ int d=-1; int x; if(d <= TOTAL_ELEMENTS-2) printf("Hello原创 2017-10-27 00:10:09 · 280 阅读 · 0 评论 -
Markdown基本语法
Markdown 会被解释为一种 “标记语法”,实际上,可以不用去理解这种看似晦涩的意思。 Markdown 接近于普通文本,另外再由少数几个语法规则描述文本结构的一种约定方式;而且花很少的时间,就能很容易掌握的技巧。 换一种说法,Markdown 是给专注于“偷懒”,却不牺牲最终产出的人群使用的。基本语法标题# 一级标题## 二级标题### 三级标题#### 四级标题####原创 2017-10-01 23:35:11 · 179 阅读 · 0 评论 -
Q06考拉兹猜想
本文是程序员算法趣题一书Q06 C语言实现,由于该书中所给的代码是Javascripts与Ruby,故在今后的阅读中会记录部分习题的C语言实现。Q06考拉兹猜想对自然数n循环执行如下操作:n是偶数时,用n除以2n是奇数时,用n乘以3后加1如此循环操作,无论初始值是什么数字,最终都会得到1但是Q06对原来的考拉兹猜想做了改动,参考题目如下:/* Name:原创 2017-10-01 23:28:55 · 1514 阅读 · 0 评论 -
Q05现金支付
本文是程序员算法趣题一书Q05 C语言实现,由于该书中所给的代码是Javascripts与Ruby,故在今后的阅读中会记录部分习题的C语言实现。Q05现金支付就是大整数分解问题.将一个大整数,用指定的小整数进行组合。Q05中作者先通过一个特定的例子,比如求1000元日元的组合,并且给出了限制,最多兑换的硬币个数不超过15.1000日元的组合情况:/* Name:原创 2017-10-01 23:28:12 · 454 阅读 · 0 评论 -
Q04切分木棒
本文是程序员算法趣题一书Q04 C语言实现,由于该书中所给的代码是Javascripts与Ruby,故在今后的阅读中会记录部分习题的C语言实现。Q04问题后面的Column中介绍了深度优先搜索和广度优先搜索。深度优先搜索算法(英语:Depth-First-Search,简称DFS)是一种用于遍历或搜索树或图的算法。沿着树的深度遍历树的节点,尽可能深的搜索树的分支。当节点v的所在边都己被探寻原创 2017-10-01 02:15:46 · 693 阅读 · 0 评论 -
TLPI源代码运行与勘误表
Title: TLPI-源代码运行 date: 2017-09-20 23:55 url: TLPI-begin 上周末开始看《UNIX/Linux系统编程手册》这本书,周末的时间看到第四章,觉得这本书比直接看Linux内核要好接受的多,因为从代码入手,可以更好的理解,比如第三章系统调用的讲解,如果只是理论方面可能比较枯燥,那么这本书中的代码,如何运行呢?下载代码这本书的主页.代码版本有两个原创 2017-10-08 20:16:10 · 466 阅读 · 0 评论 -
C函数指针基础
函数指针可以像一般函数一样,用于调用函数、传递参数。在如 C 这样的语言中,通过提供一个简单的选取、执行函数的方法,函数指针可以简化代码。 函数指针只能指向具有特定特征的函数。因而所有被同一指针运用的函数必须具有相同的参数和返回类型。 一个简单的例子:#include <stdio.h>// 函数原型void sayHello();//函数实现void sayHello(){ pr原创 2017-11-15 00:33:26 · 275 阅读 · 0 评论 -
分析C语言声明
在阅读Liunx/UNIX系统编程手册一书在阅读到第20章时遇到函数signal()的声明时完全不懂这个函数是什么意思,于是网上搜索,有几个帖子里面介绍的方法是《C专家编程》一书第三章中相关内容,本文就是为了弄懂函数signal()的声明。 在阅读了本章内容后,我尝试用自己的语言来解释函数signal()的声明,如果有幸有朋友看到,希望可以批评指正。 首先介绍signal()函数声明前先了解函数原创 2017-11-15 01:15:05 · 337 阅读 · 0 评论 -
ps -ef 输出结果的具体含义
ps [选项] 下面对命令选项进行说明: -e 显示所有进程。 -f 全格式。 -h 不显示标题。 -l 长格式。 -w 宽输出。 a 显示终端上的所有进程,包括其他用户的进程。 r 只显示正在运行的进程。 u 以用户为主的格式来显示程序状况。 x 显示所有程序,不以终端机来区分。ps -ef 显示出的结果: 1.UID原创 2017-12-07 12:00:23 · 2098 阅读 · 0 评论 -
替换空格
请实现一个函数,把字符串中的每个空格替换成”%20”。例如输入“We are happy.”, 则输出”We%20are%20happy.”。 在网络编程中,如果URL参数中含有特殊字符,如空格、’#’等,可能导致服务器端无法获得正确的参数值。我们需要将这些特殊符号转换成服务器可以识别的字符。转换的规则是在’%’后面跟上ASCII码的两位十六进制的表示。比如空格的ASCII码是32,即十六进制的0原创 2017-12-24 20:43:21 · 474 阅读 · 0 评论 -
二维数组中的查找
题目描述在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。分析: 1 2 8 9 2 4 9 12 4 7 10 13 6 8 11 15从二维数组最右上角的数值(9)开始比较,若目标比该数大,则目标肯定在该数的下方,反之原创 2017-12-24 20:42:25 · 400 阅读 · 0 评论 -
实现who命令
在看了《Linux/UNIX系统编程手册》和APUE前几章之后发现缺少相应的实践,如果只是单纯的了解API并没有太大意义,因此决定跟随《UNIX/Linux编程实践教程》将书中的例子调通与理解透。然后再去啃APUE,效果应该会好很多。 书中第二章给出了who实现的,由于书写与2004年,代码看上去有些“另类”,对于编译过程中发现的问题进行修改,在讲解代码前先记录如下用法: grep -r命令 -原创 2017-12-24 20:41:33 · 551 阅读 · 0 评论 -
shell脚本判断文件是否存在
有一个需求是判断某一个目录下文件是否存在,如果该文件不存在,则从当前目录拷贝文件到该目录。 由于没有学习写过shell脚本,晚上下班回来搜索后写出了如下的脚本,这里shell的if语法格式与C语言大致相同,语法格式: if [ 条件 ]; then 条件成立 else 条件不成立 fi fi是结束if语句。version1.0#!/bin/shmyFile="/原创 2017-12-14 23:01:12 · 41148 阅读 · 1 评论 -
[APUE]第三章文件I/O
Unix系统中大多数文件I/O只需用到五个函数:open、read、write、lseek、close。本章介绍的I/O是不带缓冲的,即:每个read和write都调用内核中的一个系统调用。它们不是ISO C的组成部分。 对于内核而言,所有打开的文件都通过文件描述符引用; 当打开或创建文件时,内核向进程返回一个文件描述符; 读写文件时,文件描述符将作为read和write的参数。 在 uni原创 2017-11-26 01:03:40 · 390 阅读 · 0 评论 -
[APUE]第二章UNIX标准及实现
这一章的阅读相对枯燥,20世纪80年代UNIX版本种类剧增以及他们之间的差别的扩大,导致很多用户呼吁对其进行标准化。 UNIX标准化介绍了ISO C IEEE POSIX Single UNIX Specification FIPS,这部分内容不详细总结。 UNIX系统实现介绍了 SVR4 4.4BSD Free BSD Linux Mac OSX Solaris. UNIX系原创 2017-11-25 22:14:11 · 369 阅读 · 0 评论 -
[apue]UNIX高级环境编程ver3勘误表[持续更新]
本文记录在阅读《UNIX环境高级编程》第三版过程中发现的错误,写这篇文章时阅读到第三章文件I/0. 本书是被誉为UNIX编程“圣经”的Advanced Programming in the UNIX Environment一书的更新版。在本书第1版出版后的十几年中,UNIX行业已经有了巨大的变化,特别是影响UNIX编程接口的有关标准变化很大。本书在保持了前一版风格的基础上,根据最新的标准对内容进行原创 2017-11-25 18:53:45 · 516 阅读 · 0 评论 -
Mac下10大常用快捷键
本文记录Mac下10大常用快捷键,来源于10个你不知道的Mac键盘快捷方式小窍门 一option + wifi图标 可以查看链接的wifi信息等,在网络出问题时可以方便打开无线诊断。 二音量键 option + shifit+音量调节键(F11 F12) 更小粒度的音量调节 三截屏 自定义区域:command+shift+4 全屏:command+shift+3 四command+原创 2017-12-04 08:35:01 · 6743 阅读 · 0 评论 -
[APUE]第一章UNIX基础知识总结
UNIX简介操作系统的狭义定义,是将操作系统定义为一种控制计算机资源,提供程序运行环境的软件,通常我们称之为内核,内核提供接口供上层应用调用,也叫做System Call(系统调用)。同时,为了方便应用程序使用内核,通常都会有公用函数库,应用程序既可以使用系统调用,也可以使用公用函数库。系统调用和公用函数库实际上并不是同一个东西,但是对于开发者来说,可以当作同一个层,都可以使用C函数来调用。再向上,原创 2017-11-23 00:19:03 · 303 阅读 · 0 评论 -
Ubuntu修改系统的默认启动级别
修改默认启动级别假设现在在图形用户界面,打开终端,输入如下命令: sudo systemctl set-default multi-user.target 然后输入reboot命令重启:假设现在在图形用户界面,打开终端,输入如下命令: sudo systemctl set-default multi-user.target 然后输入reboot命令重启。 系统重启后,就会自动进入命令行界面原创 2017-11-28 00:20:17 · 3467 阅读 · 0 评论 -
svn:工作副本已锁定解决方法
使用svn过程中恰好遇到服务器重启或者服务器有其它问题时,如下图所示: 再去update 或者commit时提示工作副本已锁定,如下图所示: 解决方法是在代码目录中右键选择clean up原创 2017-12-01 15:33:00 · 2151 阅读 · 1 评论 -
ssh连接ubuntu虚拟机
在mac中通过parallels在线下载ubuntu安装之后,通过已创建的用户登录进系统切换到root却发现root密码不对,应该做如下设置: 1、先用安装时候的用户登录进入系统 2、输入:sudo passwd 按回车 3、输入新密码,重复输入密码,最后提示passwd:password updated sucessfully 此时已完成root密码的设置,操作示例如下图所示,下图中设置原创 2017-12-09 10:38:34 · 1730 阅读 · 0 评论 -
strtol函数
本文将介绍strtol函数,参考linux programmer’s manual,如有任何疑问请评论指出. C 库函数 long int strtol(const char nptr, char endptr, int base) 把参数 str 所指向的字符串根据给定的 base 转换为一个长整数(类型为 long int 型),base 必须介于 2 和 36(包含)之间,或者是特殊值 0。原创 2017-10-08 15:40:11 · 1735 阅读 · 0 评论 -
TLPI-Chapter 6 进程
每个进程都有一个唯一进程标识号(process ID),并保存有对其父进程号的记录。 进程的虚拟内存逻辑上被划分为许多段:文本段、数据段、栈和堆。 栈由一系列帧组成,随函数调用而增长,随函数返回而减,每个帧都包含有函数局部变量、函数实参以及单个函数调用的调用链接信息。 程序调用时命令行参数通过argc argv参数提供给main()函数。通常argv[0]包含调用程序的名称。 每个进程都会获原创 2017-10-08 00:00:09 · 294 阅读 · 0 评论 -
Sublime Text 3最新注册码
在help下拉菜单,选择enter license,输入以下内容,2017-09-29亲测有效.—– BEGIN LICENSE —–TwitterInc200 User LicenseEA7E-8900071D77F72E 390CDD93 4DCBA022 FAF6079061AA12C0 A37081C5 D0316412 4584D13694D7F7D4原创 2017-09-29 14:13:22 · 1497 阅读 · 0 评论 -
C语言内存布局
写这篇博客的初衷是我再整理图书的时候翻到一本介绍Linux的书上有介绍size命令. size命令的输出不包括stack和heap的部分。只包括文本段(text), 代码段(data),未初始化数据段(bss)三部分。 示例: vi hello.c#include<stdio.h>int main(){ return 0;}wq保存之后,输入gcc -o a.out hello.原创 2017-08-21 10:39:10 · 274 阅读 · 0 评论 -
C语言main函数argc argv介绍
在刚开始学习C语言时,你一定对main函数的形式有点迷惑,我第一次看到这种形式是在国外那本被誉为C语言圣经的《C语言程序设计》。 原形如下:#include <stdio.h>int main(int argc, char ** argv){ return 0;}如果你最开始是在VC6.0这种带有界面GUI的编译器中写代码的话,可能理解起来稍有难度,当然你在VC6.0编译之后会生成一原创 2017-08-21 10:37:16 · 664 阅读 · 0 评论 -
100个GDB小技巧(一)
本文是100个GDB小技巧阅读总结,100个GDB小技巧.列出函数的名字在这个例子中源代码如下:#include <stdio.h>#include <pthread.h>void *thread_func(void *p_arg){ while (1) { sleep(10); }}int main(void原创 2017-08-20 22:20:12 · 2515 阅读 · 0 评论 -
C语言-指针二三事
有同事今天问我一个指针的问题,没深究原因,下班回来静下心来分析分析,写下这篇文章,如有任何疑问请留言.问题一要实现一个函数,我们姑且理解成函数内部 malloc申请一块内存,然后针对这块内存做一系列操作,操作这部分姑且不用实现,我们要返回申请的这片内存的地址.version 1如果你拿到这个问题就立刻编写代码的话极有可能这么写:/* Name: 二级指针 Copyright: 52c原创 2017-08-20 22:18:19 · 175 阅读 · 0 评论 -
C语言实现进度条
今天整理文件发现一个隐藏在硬盘角落里的一段神秘代码,运行之后发现这是一断让我打开眼界的程序。#include <stdio.h>#include <unistd.h>int main(){ int i; for(i=0;i<=100;i+=10) { printf("Percent completed:%3d%%\r",i); sleep原创 2017-08-20 22:15:15 · 3687 阅读 · 0 评论 -
吐槽小学奥数
前几天有幸到一家从事小学奥数培训的辅导班当老师,刚去当天辅导小学四年级奥数,看到两个题就吓尿了,尿完之后发现,原来这俩题我会呀.题目一:210!最后结果有几个零.如果你之前没有在编程之美等书上看到过这道题,如果你不是数学怪物,我想百分之80的人对这道题都会素手无策,好在我曾在编程之美看到过此题,因此很利索的搞定了.结果末尾有多少个0的问题可以转换为N!乘式中可以分解出多少个原创 2015-05-07 22:02:05 · 1251 阅读 · 0 评论 -
宏不是类型定义
#include #include #include using namespace std;struct CarType{ string maker; int year; float price;};//使用这样的宏定义还有着可移植性的优势,所有的C编译器都支持它。#define EXAMPLE1 struct CarType *//很多编译器不支持如下方法type原创 2015-05-07 21:59:08 · 682 阅读 · 0 评论 -
循环的代价
例题2-4:阶乘之和输入n,计算s=1!+2!+3!+……+n!的末6位(不含前导0)n样例输入:10样例输出:37913实现一:#include int main(){ int n,s=0; scanf("%d",&n); for(int i=1;i<=n;i++) { int factorial=1; for(int j=1;j<=i;j++)原创 2015-05-07 22:00:11 · 606 阅读 · 0 评论