![](https://img-blog.csdnimg.cn/20201014180756916.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
C语言
文章平均质量分 59
helmsgao
这个作者很懒,什么都没留下…
展开
-
深搜非递归
#include <iostream>#include <stack>using namespace std;#define MaxNode 20#define MAX 2000#define StartNode 1int map[MaxNode+1][MaxNode+1];void dfs_stack(int start, int n){ in...转载 2018-03-06 11:26:15 · 733 阅读 · 0 评论 -
ip地址的转换
int byteOrderTest(char *str){ int ip=0; ip = inet_addr(str); printf("ip=%s=%d == 0x%x\n", str, ip, ip); char *arr; arr=(char*)&ip;原创 2015-09-28 11:48:37 · 596 阅读 · 0 评论 -
从头说12种排序算法:原理、图解、动画视频演示、代码以及笔试面试题目中的应用
作者:寒小阳时间:2013年9月。出处:http://blog.csdn.net/han_xiaoyang/article/details/12163251。声明:版权所有,转载请注明出处,谢谢。0、前言 从这一部分开始直接切入我们计算机互联网笔试面试中的重头戏算法了,初始的想法是找一条主线,比如数据结构或者解题思路方法,将博主见过做过整理过的算法题逐个分析转载 2015-06-28 20:40:37 · 5698 阅读 · 0 评论 -
《C语言解惑》读后总结
《C语言解惑》读后总结:优先级等级口诀圆方括号、箭头一句号。自增自减非反负、针强地址长度(从右往左结合)乘除,加减,再移位,小等大等、等等不等,八位与,七位异,六位或,五与,四或,三疑,二赋,一真逗。其中“,”号为一个等级分段。一. 赋值操作符1.赋值操作符的关联顺序是从右向左。 int x = 2;int y,z; x *= y = z原创 2015-05-05 11:31:03 · 846 阅读 · 0 评论 -
C语言面试点(数组与指针偏移)
1.字符串的拷贝strcpy基本知识点Strcpy(字符数组1,字符串2)1.strcpy该函数是通过第二个参数的字符串的结束符来判断是否拷贝结束的;2.strlen函数得到字符串的长度,是不包含字符串结束符的;3.使用strcpy函数的时候,一定要注意第一个字符数组的大小至少不小于字符串2的大小,否则便是访问越界;4.字符串2后面的`\0`也一同被复制到字符数组1中;...原创 2015-04-05 19:12:38 · 699 阅读 · 0 评论 -
C中的volatile用法
volatile 影响编译器编译的结果,指出,volatile 变量是随时可能发生变化的,与volatile变量有关的运算,不要进行编译优化,以免出错,(VC++ 在产生release版可执行码时会进行编译优化,加volatile关键字的变量有关的运算,将不进行编译优化。)。 例如: volatile int i=10; int j = i; ... int k = i;转载 2015-04-05 19:01:07 · 569 阅读 · 0 评论 -
八进制数的表达方法!八进制数在转义符中的使用!
C,C++语言中,如何表达一个八进制数呢?如果这个数是 876,我们可以断定它不是八进制数,因为八进制数中不可能出7以上的阿拉伯数字。但如果这个数是123、是567,或12345670,那么它是八进制数还是10进制数,都有可能。所以,C,C++规定,一个数如果要指明它采用八进制,必须在它前面加上一个0,如:123是十进制,但0123则表示采用八进制。这就是八进制数在C、C++中的表达方法。原创 2015-03-24 08:50:51 · 22000 阅读 · 3 评论 -
堆(heap)和栈(stack)、内存泄漏(memory leak)和内存溢出
简单的可以理解为:heap:是由malloc之类函数分配的空间所在地。地址是由低向高增长的。stack:是自动分配变量,以及函数调用的时候所使用的一些空间。地址是由高向低减少的。一、预备知识—程序的内存分配一个由c/C++编译的程序占用的内存分为以下几个部分1、栈区(stack)— 由编译器自动分配释放 ,存放函数的参数值,局部变量的值等。其操作方式类似于数据结构中转载 2015-03-30 08:54:12 · 1324 阅读 · 0 评论 -
段错误(Segment fault)使用GDB调试core文件样例
core dump又叫核心转储, 当程序运行过程中发生异常, 程序异常退出时, 由操作系统把程序当前的内存状况存储在一个core文件中, 叫core dump. (linux中如果内存越界会收到SIGSEGV信号,然后就会core dump)在程序运行的过程中,有的时候我们会遇到Segment fault(段错误)这样的错误。这种看起来比较困难,因为没有任何的栈、trace信息输出。该种类转载 2015-03-30 09:33:25 · 3026 阅读 · 0 评论 -
内存越界
内存越界:何谓内存访问越界,简单的说,你向系统申请了一块内存,在使用这块内存的时候,超出了你申请的范围。内存越界使用,这样的错误引起的问题存在极大的不确定性,有时大,有时小,有时可能不会对程序的运行产生影响,正是这种不易重现的错误,才是最致命的,一旦出错破坏性极大。什么原因会造成内存越界使用呢?有以下几种情况,可供参考: 例1: char buf[3转载 2015-03-30 09:23:17 · 2347 阅读 · 0 评论 -
GDB十分钟教程
GDB十分钟教程作者: liigo原文链接: http://blog.csdn.net/liigo/archive/2006/01/17/582231.aspx日期: 2006年1月16日本文写给主要工作在Windows操作系统下而又需要开发一些跨平台软件的程序员朋友,以及程序爱好者。GDB是一个由GNU开源组织发布的、UNIX/LINUX操作系统下的、基于命令行的转载 2015-01-23 12:41:08 · 663 阅读 · 0 评论 -
0x0D && 0x0A
今天在看代码时看到 0x0D和0x0A,那个是换行,那个是回车呢?说实话,不清楚,到网上搜一下吧,看到了,知道了! if (szCh == 0x0D) { continue; } if (szCh == 0x0A) { break; }原创 2014-11-26 08:37:00 · 6468 阅读 · 0 评论 -
程序或-内存区域分配(五个段)--终于搞明白了
一.在学习之前我们先看看ELF文件。ELF分为三种类型:.o 可重定位文件(relocalble file),可执行文件以及共享库(shared library),三种格式基本上从结构上是一样的,只是具体到每一个结构不同。下面我们就从整体上看看这3种格式从文件内容上存储的方式,spec上有张图是比较经典的:如上图:其实从文件存储的格式来说,上面的两种view实际上是一样的,Segm...原创 2014-11-20 11:50:58 · 37177 阅读 · 7 评论 -
用size命令分析linux程序内存段的分布
用size命令分析linux程序内存段的分布Size命令的输出不包括stack和heap的部分。只包括文本段(text), 代码段(data),未初始化数据段(bss)三部分。1、文本段:包含程序的指令,它在程序的执行过程中一般不会改变。2、数据段:包含了经过初始化的全局变量和静态变量,以及他们的值。3、BSS段:包含未经初始化的全局变量和静态变量。转载 2016-01-15 11:08:17 · 1938 阅读 · 3 评论 -
非递归求两点之间的路径(无向图)
// dfs.cpp : Defines the entry point for the console application.//#include "stdafx.h"#include <iostream> #include <stack> #include <map>#include <vector>using namesp...原创 2018-03-12 11:50:05 · 859 阅读 · 0 评论 -
深搜(非递归)实现获取两点之间的路径
用栈实现求两点之间的所有路径:// dfs.cpp : Defines the entry point for the console application.//#include "stdafx.h"#include <iostream> #include <stack> #include <map>#include <vector&g...原创 2018-03-12 11:26:53 · 1018 阅读 · 0 评论 -
深搜(非递归)实现获取两点之间的路径(起点和终点不重合)
// dfs.cpp : Defines the entry point for the console application.//#include "stdafx.h"#include <iostream> #include <stack> #include <map>#include <vector>using namesp...原创 2018-03-12 10:25:07 · 626 阅读 · 0 评论 -
C语言编码注意的点
编码规范:1.谁申请的内存谁来释放2.注意内存泄露,特别是fopen和malloc的时候3.使用strcpy的时候,注意参数不能为空,被拷贝的要初始化。4.重点注意的函数:strcpy,strcmp,strncmp,在执行之前,一定要保证参数不能为空。为空的执行前直接返回。原创 2016-10-31 09:32:32 · 486 阅读 · 0 评论 -
socket的疑问解析
今天与同学争执一个话题:由于socket的accept函数在有客户端连接的时候产生了新的socket用于服务该客户端,那么,这个新的socket到底有没有占用一个新的端口? 讨论完后,才发现,自己虽然熟悉socket的编程套路,但是却并不是那么清楚socket的原理,今天就趁这个机会,把有关socket编程的几个疑问给搞清楚吧。 先给出一个典型的TCP/IP通信示意图。转载 2016-04-21 09:52:55 · 544 阅读 · 0 评论 -
free失败多是内存越界造成的
指针申请后被修改再free会失败这个free错误则不好查找,因为实际的程序往往没下面的例子这么简单,可能从申请到最后释放跨域多个模块、大量的处理代码逻辑,指针初始值被修改掉,也就是说分配的这段内存的“门牌号”被改掉了,那么free就会失败。当我们释放动态分配的内存时,通常会遭遇内存释放失败的错误,我遇到这么一个问题,当我无意间越界访问了动态分配内存时,在释放内存时,原创 2016-04-20 16:09:27 · 3861 阅读 · 0 评论 -
linux 静态库的链接 undefined reference
最近在Linux下编程发现一个诡异的现象,就是在链接一个静态库的时候总是报错,类似下面这样的错误:(.text+0x13): undefined reference to `func' 关于undefined reference这样的问题,大家其实经常会遇到,在此,我以详细地示例给出常见错误的各种原因以及解决方法,希望对初学者有所帮助。1. 链接时缺失了相关目标文件(转载 2016-05-13 17:13:00 · 1988 阅读 · 0 评论 -
Linux Proc文件系统实验(代码)
Linux上的/proc目录是一种文件系统,称为proc文件系统(虚拟文件系统),它存储内核状态信息,包括cpu、内存以及进程等信息。proc文件系统有很多优点:应用程序获取内核数据不用切换到内核态,增加了系统的安全性(像ps命令就是通过proc获取进程信息);应用程序可以通过proc直接改变内核参数,这样不用重新编译内核就可以改变和优化内核行为。总之,proc为用户应用程序获取系统内部信息提供了转载 2016-04-19 15:15:47 · 1650 阅读 · 0 评论 -
读取文本
static INT32S eachlinx_zifu(SBYTE *lineBuf, WORD32 *argc, SBYTE argv[][20])解析文本文件中的每一行,并把每一行中的字符串存储在二维数组argv中。原创 2016-03-23 15:47:21 · 316 阅读 · 0 评论 -
关于大端和小端存放的问题
试题1:请写一个C函数,若处理器是Big_endian的,则返回0;若是Little_endian的,则返回1解答: intcheckCPU( ){ { unionw { int a; char b;转载 2014-05-29 23:45:04 · 1028 阅读 · 0 评论 -
内存越界问题查找方法
1.使用对比的方法,和没有故障的版本对,对比可能越界的内存2.如果定位到了越界的变量或者数组,尝试复现,然后查看内存,是否有变化,如果有确定越界的内容是否和猜想的一致。3.查看变量符号的内存位置,使用objdump -s (带调试信息的可执行程序)原创 2016-03-19 16:33:05 · 3555 阅读 · 0 评论 -
C语言的那些秘密之---函数返回局部变量
一般的来说,函数是可以返回局部变量的。 局部变量的作用域只在函数内部,在函数返回后,局部变量的内存已经释放了。因此,如果函数返回的是局部变量的值,不涉及地址,程序不会出错。但是如果返回的是局部变量的地址(指针)的话,程序运行后会出错。因为函数只是把指针复制后返回了,但是指针指向的内容已经被释放了,这样指针指向的内容就是不可预料的内容,调用就会出错。准确的来说,函数不能通过返回指向栈内存的指针(注意转载 2015-01-20 15:50:55 · 913 阅读 · 1 评论 -
C语言中extern的用法
在C语言中,修饰符extern用在变量或者函数的声明前,用来说明“此变量/函数是在别处定义的,要在此处引用”。1. extern修饰变量的声明。举例来说,如果文件a.c需要引用b.c中变量int v,就可以在a.c中声明extern int v,然后就可以引用变量v。这里需要注意的是,被引用的变量v的链接属性必须是外链接(external)的,也就是说a.c要引用到v,不只是取决于在a.c转载 2014-12-28 12:49:25 · 803 阅读 · 0 评论 -
Pthread线程的资源的释放
1. 调用pthread_detach(pthread_self())#include#include#includevoid print_message( void *ptr );int main( int argc, char *argv[] ){ pthread_t thread_id; int rc; int num = 5; do{ pri原创 2014-12-05 14:23:19 · 8215 阅读 · 1 评论 -
炮兵阵地详解
NOI2001 炮兵阵地详解【题目描述】 司令部的将军们打算在N*M的网格地图上部署他们的炮兵部队。一个N*M的地图由N行M列组成,地图的每一格可能是山地(用"H" 表示),也可能是平原(用"P"表示),如下图。在每一格平原地形上最多可以布置一支炮兵部队(山地上不能够部署炮兵部队);一支炮兵部队在地图上的攻击范围如图中黑色区域所示:转载 2012-04-16 22:32:43 · 2891 阅读 · 0 评论 -
海盗分金
海盗分赃难题: 十个海盗要瓜分100枚金币,为此他们拟定了以下规则。 从船长到厨子每个海盗由高到低共分十个等级,分配权在最高等级的海盗手里。他可以任意分配每个海盗的所得,但必须取得一半或一半以上海盗(包括自己在内)的支持,否则他将被同伴处死。处死之后分配权将转移到下一个等级最高的海盗手里,当然,他也将面临同样艰难的选择。 基于海盗们贪婪而凶残的本性,每个没有分配权的海盗都想分得更转载 2012-03-21 16:49:17 · 2761 阅读 · 0 评论 -
内存对齐与#pragma pack的理解
一、内存对齐的原因 大部分的参考资料都是如是说的: 1、平台原因(移植原因):不是所有的硬件平台都能访问任意地址上的任意数据的;某些硬件平台只能在某些地址处取某些特定类型的数据,否则抛出硬件异常。 2、性能原因:数据结构(尤其是栈)应该尽可能地在自然边界上对齐。原因在于,为了访问未对齐的内存,处理器需要作两次内存访问;而对齐的内存访问仅需要一次访问。 二、对齐规则 每转载 2012-04-02 09:45:28 · 1220 阅读 · 0 评论 -
C语言文件操作函数大全
C语言文件操作函数大全clearerr(清除文件流的错误旗标)相关函数 feof表头文件 #include 定义函数 void clearerr(FILE * stream); 函数说明 clearerr()清除参数stream指定的文件流所使用的错误旗标。 返回值 fclose(关闭文件) 相关函数 close,fflush,fopen,setbuf转载 2012-03-02 16:39:18 · 530 阅读 · 0 评论 -
ruby环境的搭建和插件的安装
ruby环境的安装 a).首先下载安装rubyinstaller-1.8.7-p357.exe,完成ruby运行环境和环境变量的配置工作.输入ruby -v屏幕显示版本,安装成功b).下载安装Myeclipse6版本,或者eclipse内核为3.3.2 c).其次安装aptana_update_024747.zip插件, find and install->new Archived转载 2011-12-30 14:30:07 · 1723 阅读 · 0 评论 -
error LNK2001: unresolved external symbol 各种不同的link错误的解决方法
第一:nafxcwd.lib(appcore.obj) : error LNK2001: unresolved external symbol ___argvnafxcwd.lib(appcore.obj) : error LNK2001: unresolved external symbol ___argcnafxcwd.lib(timecore.obj) : error LNK20转载 2011-12-29 22:41:11 · 2354 阅读 · 1 评论 -
c 函数指针的定义 和 C++回调函数的使用
*************************************************************************************************************************************************************************************************函数指针与原创 2011-12-29 09:29:03 · 1378 阅读 · 0 评论 -
有关-内存对齐-的总结
今日在工作中遇到了要宣讲内存对齐的内容,及仔细的总结了有关内存对齐的相关知识。 要点:在保证可读性的前提下,合理排列结构中成员的顺序(按照由小到大的顺序排列),可以提高内存利用率。例子:例:#pragma pack(push,1)typedef struct _structAddressAndSizeTest{ BYTE cbTest; wcha原创 2011-12-21 09:42:03 · 750 阅读 · 0 评论 -
continue && break 的用法
目前为止我还没见到过用在循环以为的例子………… continue 是用在for循环和while和do……while语句中continue 的作用是:是结束本次循环,即跳过continue下面尚未执行的语句,直接跳到下一次是否执行循环的判断。格式 continu原创 2011-08-27 09:24:28 · 1104 阅读 · 0 评论 -
C语言之详解#ifdef等宏及妙用
C语言之详解#ifdef等宏及妙用 这几个宏是为了进行条件编译。一般情况下,源程序中所有的行都参加编译。但是有时希望对其中一部分内容只在满足一定条件才进行编译,也就是对一部分内容指定编译的条件,这就是“条件编译”。有时,希望当满足某条件时对一组语句进行编译,而当条件不满足转载 2011-07-13 23:13:45 · 621 阅读 · 0 评论 -
宏定义 && typedef
typedef typedef int INTEGER;用typedef f声明的新的类型名代替已有的类型名。进一步可以:1.typedef int NUM[1000] (声明 NUM 为整形数组类型) ; NUM n(定义n 为整形数组变量)原创 2011-07-07 01:03:29 · 979 阅读 · 0 评论 -
计算出二进制数中有多少个1
计算出二进制数中有多少个1《编程之美》这本书被很多计算机专业的学生奉为面试经典, 其中也包括我。早就听高年级学长说过,面试中的题目有80%取自《编程之美》这本书, 掌握了其中的全部算法可以为自己的面试带来很多的好处。从今天起, 我每天更新编程之美上的一个算法, 方便想要学习的童鞋学习。计算机专业的学生对二进制数应该都不陌生, 二进制就是由连续的有穷的0,1序列组原创 2012-04-17 23:15:11 · 2993 阅读 · 0 评论