C语言
文章平均质量分 59
善良超锅锅
hello world!
展开
-
菜鸟攻略–C语言多文件编程初探(二):使用 gcc 手动编译多文件 C 程序
菜鸟攻略–C语言多文件编程初探(二):使用 gcc 手动编译多文件 C 程序四年前我发布了一篇菜鸟攻略–C语言多文件编程初探(一),没想到这篇文章成了我博客上阅读量最多,评论数也最多的文章。当时我读大二样子,对学习 C 语言有着强烈的兴趣。本来是想写一个系列的,所以文章标题中有个(一)。当初计划的是第二篇写通过命令行调用 gcc 工具手动编译程序,在写一篇使用 makefile 的。后来回头看...原创 2016-11-24 21:34:18 · 16786 阅读 · 15 评论 -
C语言类型装换
当运算符的几个操作数类型不同时,编译器会通过一些规则来把它们转换为某种相同的类型。1.自动转换(隐式类型转换)如果没有进行强制类型转换,默认为自动转换。当一个运算符的几个操作数类型不同时,自动转换的原则是将“比较窄的”操作数转换为“比较宽的”操作数,并且不丢失信息。特例:对于赋值运算符,赋值运算符右边的值要转换成左边变量的类型,左边变量的类型即赋值表达式结果的类型。右边的“宽”原创 2013-04-14 18:49:08 · 1630 阅读 · 3 评论 -
从一道面试题分析Linux进程+IO缓冲区机制
从一道面试题分析Linux进程+IO缓冲区机制原创 2013-10-01 21:10:34 · 3775 阅读 · 1 评论 -
也谈(++i)+(++i)+(++i)
今天有人在论坛中发了这样一个蛋疼的问题:int i =1,d; d=(++i)+(++i)+(++i); printf("%d\n",d);上面的输出结果是多少?如果你没见过。你可以先想想结果是多少?再去编程验证一遍。如果你想不通,再来看原因。原创 2012-10-06 17:31:17 · 2347 阅读 · 7 评论 -
Ubuntu12.04安装MySQL
安装MySQL服务端和客户端$ sudo apt-get install mysql-server mysql-client 安装MySQL图形化管理工作$ sudo apt-get install mysql-workbench 使用C语言访问MySQL数据库还必须安装对应的开发包$ sudo apt-get install libmysqlclient-de原创 2013-05-04 00:16:13 · 1878 阅读 · 0 评论 -
Win7、VS2010下载、安装libxml2
一.下载、安装libxml下载地址http://zlatkovic.com/libxml.en.html进去后选择右侧Win32 binaries (FTP)即可进入FTP服务器下载。由于libxml2库是依赖于iconv库和zlib库的,所以要下载三个文件。我选择的是iconv-1.9.2.win32.zip、libxml2-2.7.8.win32.zip、zlib-1.2.5.win3原创 2013-05-02 13:54:18 · 7332 阅读 · 3 评论 -
C语言文件定位相关函数
文件中有一个位置指针,指向当前读写的位置,在顺序读写一个文件的过程中,每读写一个字符,位置指针自动滑向下一个字符位置。可以移动这个位置指针,达到随即读写目的。下面是几个和文件定位有关的函数。 1.void rewind(FILE *fp);fp为文件指针。返回值为void 即无返回值该函数的作用是使位置指针重新返回文件的开头。 2.int feek(FILE *fp,Llo原创 2011-12-05 21:22:43 · 3009 阅读 · 0 评论 -
利用OpenSSL实现MD5加密函数(附带Ubuntu 12.04安装OpenSSL库的方法)
一.安装OpenSSL库 把下面的东西一股脑儿的装上,以免编译时出现链接错误apt-get install openssl libssl-dev libssl-doc libcurl4-openssl-dev 二.实现MD5加密函数,接受一个字符串,返回它的常规32位小写MD5值/* md5_encrypt.h*/#ifndef _ENCRYPT_原创 2013-04-26 20:01:26 · 4739 阅读 · 0 评论 -
github生成SSH公钥
1 如果没有安装ssh,那么使用下面的指令sudo apt-get install ssh2 检查SSH公钥cd ~/.ssh看看存不存在.ssh,如果存在的话,掠过下一步;不存在的请看下一步3 生成SSH公钥$ ssh-keygen -t rsa -C "your_email@youremail.com" # Creates a n转载 2013-04-16 07:55:59 · 1939 阅读 · 0 评论 -
大端小端模式
1.简介内存中存储数据有两种方法:小端模式和大端模式。这取决于CPU,x86的CPU一般为小端模式。little-endian:将低序字节存储在起始地址;(只需记住小端,就可推出大端。两个都记反而容易混淆)big-edian:将高序字节存储在起始地址;术语“大端”和“小端”表示将多字节值的哪一端存储在起始地址。比如要存储一个两字节的短整数。short a=0x010原创 2013-04-14 12:07:17 · 1570 阅读 · 0 评论 -
gcc编译C程序常用选项
-o 指定目标文件名-std=c99 用C99标准编译-Wall 警告全开-c 只编译不链接,生成中间文件-g 生成调试信息-O0 : 默认不优化(若要生成调试信息,最好不优化)-O1 : 简单优化,不进行速度与空间的权衡优化; -O2 : 进一步的优化,包括了调度。(若要优化,该选项最适合,它是GNU发布软件的默认优化级别;-O3 : 鸡肋,兴原创 2013-04-15 20:27:16 · 2065 阅读 · 0 评论 -
C语言变量类型隐式转换小陷阱
int型变量可以直接和unsigned int 比较大小吗?不可以。 问题描叙:这个问题是我在写kmp算法时遇到的。int Index_KMP(char *S, char *T, int pos){ int next[strlen(T)]; get_next(T,next); int len = strlen(S);原创 2013-09-20 14:26:37 · 2233 阅读 · 0 评论 -
实现整数转成字符串
实现整数转成字符串题目用 C 语言实现,将一个整数转成字符串,比如 123 转成“123”。要求不能使用 itoa 等函数。代码#include <stdio.h>#include <stdlib.h>#include <string.h>char * itostr(int v){ int a; if(v < 0) { a = -v; }原创 2017-04-16 19:35:32 · 1517 阅读 · 0 评论 -
C语言奇思妙想:求1+2+…+n,要求不能使用乘除法、for、while、if、else、switch、case 等关键字以及条件判断语句(A?B:C)
来源:据说是某一年某个公司的面试题题目:求1+2+…+n,要求不能使用乘除法、for、while、if、else、s witch、case 等关键字以及条件判断语句(A?B:C) 分析:这题本来很简单,但是不能用循环和条件判断语句。但是理论上所有的递归都可以转化为循环,那是否可以用递归代替循环呢?照着这个思路走下去,貌似可以。可是用递归的话,递归怎么终止呢?这就得在return语句原创 2013-09-20 10:06:41 · 5679 阅读 · 4 评论 -
菜鸟攻略——C语言多文件编程初探(一)
发现有很多童鞋学了一年半载的C语言还不会多文件编程。很多人到现在一个程序都只有一个源文件(main.cpp或mian.c)。甚至连我的室友大飞哥(我们都大二下学期了)昨天也问我怎么做。其实C语言的多文件并不神秘。哥今天姑且装B一回,说说怎么多文件编程,顺便自己也小结一下。说明:我用的编程工具为devc++,vc6.0也类似。不过vc.6.0会强迫你建工程,不太方便。跟着我一步一步来,很简单原创 2012-03-04 13:21:43 · 66603 阅读 · 86 评论 -
指针常量和常量指针
区别 读法 意义原创 2015-06-10 17:43:13 · 957 阅读 · 0 评论 -
C语言经典算法:如何较快的分解质因数
将一个正整数分解质因数。例如:输入90,打印出90=2*3*3*5。初级算法:#include#include#includeint main(){ int n,i; scanf("%d",&n); printf("%d=",n); for(i=2;i<=sqrt(n);i++) { if(n%i==0) { n/原创 2012-03-11 15:54:13 · 23434 阅读 · 7 评论 -
最大公约数和最小公倍数
最大公约数和最小公倍数//辗转相除法求最大公约数 int GCD(int m,int n){ int tem; if(m<n){tem=m;m=n;n=tem;} while(n!=0){ tem=m%n; m=n; n=tem; } return m; }//辗转相减法求最大公约数 int GCD原创 2012-03-15 09:32:32 · 1154 阅读 · 0 评论 -
fscanf读入文件时错误的原因?
今天想弄一下二进制文件读写(后来才知道fscanf和fprintf不能用于二进制文件的读写,但下面的总结对ASSCII文件适用。)发现一个问题,搜了好久也没解决如果二进制文件写入的时候,用fprintf写入多个数据时,数据之间没用空格隔开如下面fprintf(out,"%c%d%d%d%d",HT[i].data,HT[i].weight,HT[i].parent,HT[i].lchild,HT原创 2011-12-11 02:21:33 · 10525 阅读 · 7 评论 -
C语言不完全类型与延迟定义
一直以为我的C语言学的还可以,虽说不是出神入化,但是至少比较熟悉吧。但是前一段时间看了一篇微信推文,再百度了一下C语言不完全类型。发现我居然C语言不完全类型和用途甚广的延迟定义都没概念。这两天仔细查阅了相关概念并用代码实验了一下。本文结构如下: C语言不完全类型概念介绍一个故事延迟定义的优点思考…C语言不完全类型不完全类型也就是不知道变量的所有的类型信息。比如可原创 2014-08-11 21:06:56 · 3997 阅读 · 0 评论 -
C语言全局未初始化数据段分析
前言: 在分析C语言全局未初始化变量时,发现在目标文件中全局未初始化变量并不是直接放在bss段中。 再后来发现在两个.c文件中定义同名的全局变量,链接时居然没有发生符号重定义错误。才知道C语言弱定义的概念。这在C++中是绝对不行的。 后来搜索到一篇博文说: “全局未初始化变量没有被放到任何段,而是作为未定义的COMMON符号原创 2013-10-10 17:52:39 · 6206 阅读 · 1 评论 -
C语言错误处理技巧
1.当调用一个函数失败时,可以用perror输出友善的错误处理。便于出错时调试。#include void perror(const char*s);perror在标准错误输出上输出一条消息来描述perror调用之前最近出现的错误。一般是系统调用或库函数调用失败导致的错误。perror会先输出你传入的字符从s,然后紧接着输出一个冒号,接着是一个空格,再接着是一个消息串和一个换行符原创 2013-04-12 16:43:47 · 2412 阅读 · 0 评论 -
探究C语言字符和字符字面值
本文出自shimachao的博客http://blog.csdn.net/shimachao/article/details/8264676转载请注明出处。字符char: C语言里的字符型其实就是一种整型。可以像对int型一样对char(字符)变量进行算术操作。具体把char变量解释成char型变量还是int型变量依程序而定。int型变量和char型变量还可以相符赋值(原创 2012-12-06 15:13:09 · 4700 阅读 · 1 评论 -
数组中a和&a的区别
最近在看C语言深入一点方面的书,感觉指针和数组的关系有很大要理解的地方。偶尔看到有人写了关于指针和数组的长篇大论。直觉告诉我那是一篇好文章。一定是那位高手几年来实践和琢磨的成果。如果能达到他理解的那种水平,那我的C语言又会上一个台阶。但是为了能有深刻的体会,我先不看他得文章,自己先琢磨一下。int a[5]={0,1,2,3,4}int *p1=a; //将p1定义为指原创 2011-12-08 11:33:34 · 1199 阅读 · 1 评论 -
#define和typedef的区别,我的理解
typedef int* pint; //发生在编译时相当于个int*起了一个别名,以后可以用来定义整型指针,也是一个类型名了。pint p,q; //p,q都是指向int型的指针而#define pINT int* //发生在预编译阶段只做简单的宏替换如pINT p,q替换为int*p,q; //p是指针,而q只是一个整型变量t原创 2011-12-07 21:29:49 · 1366 阅读 · 0 评论 -
头文件包含时路径问题
直接在vc6.0的工程中点右键添加的头文件。但包含时没写路径。d:\programfile\vc98\include\list.h(37) : error C2146: syntax error : missing ';' before identifier 'Length'd:\programfile\vc98\include\list.h(37) : error C2501: 'DWO原创 2011-12-01 00:55:07 · 3106 阅读 · 0 评论 -
c++文件输入
ifsteam inFile("in.txt"); getline,读取一整行,在该题目中可以读入一整行然后分别进行字符判别操作。 inFile>>,读取一个字符,但它忽略所有的空格换行TAB等转义符。 inFile.get,读取一个字符,但不忽略任何转义字符。原创 2011-11-27 18:33:51 · 939 阅读 · 0 评论 -
数据结构:队列的实现
typedef struct QNode{ int data; QNode *next;}QNode,*QueuePtr;class Queue{ public: QueuePtr front; QueuePtr rear; int count; Queue(); ~Qu原创 2011-10-31 21:03:40 · 982 阅读 · 1 评论 -
菜鸟的高手情结——数据结构之走迷宫.数据结构习题哦
这几天,我睡不着,课也不想上。就是因为数据结构的作业,一道迷宫问题。只要是上过数据结构的一订会遇到这道题。我原以为这么经典的题目网上一定会有完美的答案。搜了好久也没见完美。有是有人谈,但都只给一大段代码,看不懂啊!为了证明我不是弱智我翘了选修课终于搞定它。水平有限,这只是初步代码。废话少说直接代码: //main.cpp#include#include#include "s原创 2011-10-24 21:39:19 · 1593 阅读 · 0 评论 -
数据结构栈的应用之括号匹配
括号匹配,多项式的运算,走迷宫,是数据结构讲栈的经典题目,因为括号匹配是栈的应用最简单的题目了。所以我就拿它开刷了。 所谓括号匹配就是接受用户输入的一个字符串,判断该字符串中的括号是否正确。比如正括号比反括号多,或者括号出现的顺序不对等等。 算法分析:比如【()】,先从第一个括号【开始,把它保存在栈中,检查下一个字符看它是不是】,下一个字符是(原创 2011-10-23 12:54:08 · 2204 阅读 · 0 评论 -
C++学习笔记(2),c字符串、string对象、字符串字面值的区别
字符串的连接:1.c++中string可以替代c中的char数组且前者用起来更方便。连接两个string对象只需用'+';c字符串是用char数组实现的。以下都称c字符串为char数组例如:string s1="hello",s2="world"; string s3=s1+s2; //也可以s3=s1+"world"cout原创 2011-10-23 12:11:26 · 2180 阅读 · 0 评论 -
C++Primer学习笔记(一)
csdn的博客系统抽了一会儿风,现在从QQ空间把这篇文章复制过来。 思考了几天终于开始学c++了。虽然暑假时看过一遍《写给大家看的c++书》,但那时是为了做个程序参见学校的星火杯。所以比较浮躁。c++只是看了个大概。后来学了MFC,发现没学好c++,MFC很补理解。看来论坛上的人说的对,不要学哪些花哨的东西,先学好c++再说。 都说《c++Primer》很金典,所以就选这本原创 2011-10-19 17:44:29 · 1578 阅读 · 0 评论 -
直接插入排序、折半插入排序、2-路插入排序实现
按照书上的说法,排序是计算机程序设计中的一种重要操作,它的功能是将一个数据元素(或记录)的任意序列,重新排列成一个按关键字有序的序列。 为了方便我们直接对整型数组进行排序。将数组元素按照小到大的顺序排列。以后遇到什么记录、结构体排序算法也一样。这里只给出实现,算法说明请看严蔚敏的书。//直接插入排序void InsertSort(int array[],size_原创 2011-12-09 16:12:30 · 3311 阅读 · 3 评论 -
scanf(),printf()以及fscanf(),fprintf()的返回值
scanf(),printf()以及fscan(),fprintf()的返回值都为int型 scanf()的返回值为成功输入的数据个数如scanf("%d%d%s",&a,&b,s);执行成功返回3. scanf("%d%d",&a,&b);执行成功返回2.如果在输入的过程中scanf("%d%d",&a,&b);由于某种原因只有a输入成功了则返回1,a、b都没成功则返回0原创 2011-12-05 17:10:40 · 8419 阅读 · 3 评论 -
C语言经典题目螺旋矩阵
//N阶螺旋矩阵#include #include int main(){ int N,i,j,n,num=1; int a[10][10]={0}; printf("输入你要输出的几阶中断:"); scanf("%d",&N); for(n=0;n<=N/2;n++) { for(j=n;j<=N-n-1;j原创 2012-09-30 10:14:48 · 20328 阅读 · 2 评论 -
编程爱好者网站试题中心 的一道题:关于*(p++)
原以为这道题会很简单,没想到做错了。printf("%d",*(p++));是先打印出*p的值2,再p自加,然后p指向a的第二个元素4.p++是先参与所在表达式的运算再自加,即使有括号也如此。原创 2012-03-10 10:50:57 · 2035 阅读 · 5 评论 -
C语言文件输入输出错误检测,仅仅是照搬谭浩强书上的,便于以后查阅
1.判断文件是否打开成功: 判断文件是否打开成功可用fopen的返回值if((fp=fopen("filename","r"))==NULL)则打开失败。 2.判断文件是否结束:判断ASCII文件是否结束fgetc()会返回结束标志EOF(即-1)由于二进制文件数据会出现-1所以必须用函数feof(fp)判断,feof(fp)==1则已结束。所以读入一个文件可原创 2011-12-05 23:21:05 · 3121 阅读 · 0 评论 -
为什么内存泄露后文件IO老失败!不管是fgets还是fread都失败
今天遇到一个问题,在程序的前一段申请了一段内存调用的一个函数申请了内存没有释放。再调用第二个函数实现文件IO发现老失败。我前后检查了fread和fgets的各个参数都没错。单步调试到文件读入的部分就崩溃。搞了好久实在不解为什么。后来网上有人说有可能是内存泄露了。我检查了程序,发现前面调用的函数造成了内存泄露。加了一条free语句后,问题解决了。但是我是不明白为什么前面内存泄露会导致后面原创 2011-12-11 23:54:59 · 1990 阅读 · 1 评论 -
C语言文件输入输出函数笔记
发现最近写的程序总是要用到文件操作,所以把C语言与文件输入输出有关的函数复习一下。 C语言是通过将一个文件类型指针与文件关联起来来对文件进行打开、关闭、输入、输出。文件类型为FILE(实际上是一个结构体)。定义一个文件指针为FILE *fp;就可以将fp和某个文件关联起来进行操作了。例如要打开一个文件:原创 2011-12-05 11:11:40 · 4501 阅读 · 2 评论 -
C语言文件打开方式
使用文件的方式共有12种,下面给出了它们的符号和意义。 文件打开方式 意义rt 只读打开一个文本文件,只允许读数据 wt 只写打开或建立一个文本文件,只允许写数据 at 追加打开一个文本文件,并在文件末尾写数据 rb 只读打开一个二进制文件,只允许转载 2011-12-10 20:26:13 · 12697 阅读 · 2 评论