
C语言强化
吴英强
80后,IT男,全栈工程师。
展开
-
指针的疑问
1.一个指针变量占用多少个字节的内存空间?占用的空间是否会跟随所指向变量的类型而改变?在同一种编译器环境下,一个指针变量所占用的内存空间是固定的。比如,在16位编译器环境下,任何一个指针变量都只占用2个字节,并不会随所指向变量的类型而改变。2.既然每个指针变量所占用的内存空间是一样的,而且存储的都是地址,为何指针变量还要分类型?而且只能指向一种类型的变量?比如指向int类型的指针、原创 2013-08-09 11:30:42 · 1480 阅读 · 0 评论 -
指针与字符串:(const)char *p2 = "lmj";定义的是一个字符串常量!符串常量,正因为是常量,所以它内部的字符是不允许修改的。
int main(){ char *p2 = "lmj"; *p2 = 'L'; printf("%s", p2); return 0;}程序运行结果:段错误看起来似乎是可行的,但这是错误代码,错在第2行。首先看第1行,指针变量p2指向的是一块字符串常量,正因为是常量,所以它内部的字符是不允许修改的。有人可能搞蒙了,这里的第1行代码char *p2 = "原创 2013-08-09 11:31:13 · 1503 阅读 · 0 评论 -
利用getopt_long()为程序传入参数
man getopt_long,得到其声明如下:int getopt_long(int argc, char * const argv[],const char *optstring, const struct option *longopts,int *longindex);函数中的argc和argv通常直接从main()的两个参数传递而来。optsting是选项参数组成原创 2013-11-04 15:42:28 · 1707 阅读 · 0 评论 -
C编程规范, 示例代码。
/***********************************************************************Copyright (c) 2014,TianYuan*All rights reserved.** 文件名称: UnitTest.c* 文件标识:无* 内容摘要:协议及单元测试示例代码* 其它说明:无* 当前版本: V1.0* 作原创 2014-07-10 08:10:18 · 2755 阅读 · 0 评论 -
UC高级编程--实现myls程序
跟着达内视频,学习UC高级编程,完成程序小lianxi原创 2014-07-02 18:51:28 · 2256 阅读 · 0 评论 -
C语言中参数入栈规则
/*************************c语言栈低为高地址,栈顶为低地址。函数参数的入栈顺序为从右至左。***************************/ 关于栈: 首先必须明确一点也是非常重要的一点,栈是向下生长的,所谓向下生长是指从内存高地址--->低地址的路径延伸,那么就很明显了,栈有栈底和栈顶,那么栈顶的地址要比栈底低。对x86体系的原创 2013-08-09 11:30:22 · 2302 阅读 · 0 评论 -
C编写的调试宏
>#ifndef _DEBUG_H_#define _DEBUG_H_#include #include #include #define ERRBUFLEN 1024#ifdef DEBUG_ON#define ERR_PRINT(str) \ do \ { \ char errbuf[ERRBUFLEN] = { '\0' }; \ snprin原创 2013-08-09 11:30:45 · 1575 阅读 · 0 评论 -
分析函数传参及返回值
刚学指针的人多会遇到这样的情况,就是你给一个函数传递一个指针变量,在这个函数中为这个指针申请空间,赋值,可是等函数结束后这个指针还是一个空指针,对其的操作编译器会报段错误或干脆给你一个莫名其妙的值,这是一个随机数。原创 2014-11-27 21:52:22 · 1072 阅读 · 0 评论 -
12306泄露的数据,快速查找有木有你的, 编程实现示例
#define _CRT_SECURE_NO_WARNINGS#include #include #include#include #include //多线程char g_path[200] = "I:\\BaiduYunDownload\\1亿QQ信封\\1E5-10位\\QQ信封.txt";#define N 84357584char str[100] = { 0 }原创 2015-01-09 21:27:40 · 1429 阅读 · 0 评论 -
表达式计算器
1+2/3*(4-6)*6/8+9*2 = ?原创 2015-01-05 21:33:41 · 1226 阅读 · 0 评论 -
C语言atoi()和itoa()函数的实现
字符串转换为整数:int myatoi(char *src){ char flag = 0; int sum = 0; int i = 0; int len = strlen(src); if ( NULL == src){ return 0; } if ( src[i] == '-'){ flag = '-'; ++i; } for原创 2013-08-09 11:30:38 · 1597 阅读 · 0 评论 -
插入法排序
所谓插入排序法,就是检查第i个数字,如果在它的左边的数字比它大,进行交换,这个动作一直继续下去,直到这个数字的左边数字比它还要小,就可以停止了。原创 2014-07-18 20:13:17 · 1329 阅读 · 0 评论 -
封装printf函数,针对工程中不同的模块(can,gps, gsm)进行调试输出
#ifndef DEBUG_H#define DEBUG_H#include //Usage://just include this file and define MYDEBUG_PART like////int MYDEBUG_PART=MYDEBUG_CAN////in the program use the command by//mydebug(can, "test原创 2014-04-19 15:02:20 · 1571 阅读 · 0 评论 -
函数中的形式参数和实际参数
1.举例:使用函数交换两个整形变量的值运行结果:分析:c语言中实际参数和形式参数之间采用值传递的方式来传递数据。在被调函数中,使用的是实际参数的一个拷贝数据。我们在swap函数中交换了a和b,那只是主函数x,y数据的一个辈分,不能对main函数中的x,y产生影响,就像我们修改了一个复印件,不会对元件造成任何影响。形式参数和实际参数可以不同名。使用数组作为原创 2014-03-20 10:58:30 · 10588 阅读 · 0 评论 -
应该知道的c知识点
1、strlen():计算的是字符数,不包含‘\0’。一个中文占3个字符2、'\0'是一个ASCII码值为0的字符3、char *p; *p = 10;这是错误的做法,应该在指针确定指向的变量后,再进行相应的操作。4、grub-md5-crypt xxx 生成md5密码原创 2013-08-09 11:31:09 · 1200 阅读 · 0 评论 -
返回局部变量的地址
我们可能会经常写出这样的代码:int add(int a , int b){ return a + b;}当然,这是合理的写法,使函数的返回值为 int ,所以,调用函数后会返回一个int型的值。今天,我想讨论的问题当然不是这个,请看下面这段代码:char* Func_1(void){ char str[30] = "Bruce"; cout return str;原创 2013-08-09 11:31:38 · 1829 阅读 · 0 评论 -
C语言内存分析
程序一:char* toStr() { char *s = "abcdefghijkl"; return s;}int main(){ cout endl; return 0;}程序二:char* toStr() { char s[] = "abcdefghijkl"; return s;}i原创 2013-08-09 11:31:29 · 1396 阅读 · 0 评论 -
Linux下调试段错误的方法[Segmentation Fault]--GDB
原文1、段错误是什么?段错误是指访问的内存超出了系统给这个程序所设定的内存空间,例如访问了不存在的内存地址、访问了系统保护的内存地址、访问了只读的内存地址等等情况。A segmentation fault (often shortened to segfault) is a particular error condition that can occur during the o原创 2013-11-07 15:08:41 · 11016 阅读 · 10 评论 -
GCC功能及使用
功能:预处理、编译、连接、汇编编译过程(从源代码到可执行文件)预处理:gcc -Ehello.c -o hello.i //生成预处理后的源文件汇编:gcc -S hello.i //生成hello.s目标代码生成:gcc -c hello.s //生成hello.o连接:gcc hello.o -o hello //生成可以行文件hel原创 2013-11-21 16:25:35 · 3992 阅读 · 0 评论 -
swap() 交换两个数
普通程序员:void swap(int &a, int &b){ int temp; temp = a; a = b; b = temp;}文艺程序员void swap(int &a, int &b){ a = a^b; b = a^b; a = a^b;}2B程序员void swap(int a, int b){ int temp; temp = a;原创 2013-08-09 11:30:34 · 1650 阅读 · 1 评论 -
C语言编写的娱乐小工具【小时钟、猜数字】
1、实现动态显示当前计算机时间#include #include int main(){ int h = 0; int m = 0; int s = 0; int t = 0;//存储time函数的返回值 while(1){ t = time(0);//取得当前的时间(秒的总和) //将t拆分为时分秒 s = t%60; m = t%3600/60;原创 2013-12-09 16:01:07 · 1840 阅读 · 0 评论 -
将一个int类型变量(4字节), 以二进制形式进行输出--showbits.c
showbits.c原创 2014-03-08 09:20:31 · 3496 阅读 · 0 评论 -
Printf格式输出
printf()输出各种类型完整格式:%-0m.nl或者h格式字符% 转换说明的开始(占位符)不能省略- 左对齐,省略 右对齐0 有0代表空位填0, 省略代表空位不填m.n m域宽 指对应的输出项在输出设备占用多个字符的宽度 n精度 输出浮点数的时候 小数点后面的位数l 整数long浮点数doubleh 将整数的格式休整为shorti/d 输出十进原创 2014-03-14 10:37:36 · 1200 阅读 · 0 评论 -
文件操作函数fread/fwrite/fseek演示例程
fread函数。从一个文件流中读数据,最多读取count个元素,每个元素size字节,如果调用成功返回实际读取到的元素个数,如果不成功返回 0。size_t fread ( void *buffer, size_t size, size_t count, FILE *stream) ;参数:buffer 用于接收数据的内存地址,大小至少是size*count字节.size 单个原创 2014-03-28 09:44:48 · 1984 阅读 · 0 评论 -
检索进程是否运行------------strstr()-------------
分析:通过cmd指令(windows平台tasklist/Linux平台ps -aux)可以查看到进程名称,然后通过字符串进行匹配。注意点:output的空间需要足够大,不然会有溢出的错误。windows:#define _CRT_SECURE_NO_WARNINGS#include #include #include void execmd(char *cmd, char原创 2015-01-13 20:46:11 · 1041 阅读 · 0 评论