基础知识

1.const

const 修饰的数据类型是指常类型,常类型的变量或对象的值是不能被更新的。

  1. int const x=; const int x=; //在定义该const变量时,通常需要对它进行初始化,因为以后就没有机会再改变它了

const定义常量从汇编的角度来看,只是给出了对应的内存地址,而不是像#define一样给出的是立即数,所以,const定义的常量在程序运行过程中只有一份拷贝,而#define定义的常量在内存中有若干份拷贝。

  1. #define PI 3.14159 //常量宏
  2. const double Pi=3.14159; //此时并未将Pi放入RAM中
  3. double i=Pi; //此时为Pi分配内存,以后不再分配!
  4. double I=PI; //编译期间进行宏替换,分配内存
  5. double j=Pi; //没有内存分配
  6.  
  7. double J=PI; //再进行宏替换,又一次分配内存!

main函数

int main(int argc , char* argv[],char* envp[])
这里有三个参数 :
第一个:argc是个整形变量,表示命令行参数的个数(含第一个参数,就是含.exe的字符)
第二个:argv是个字符指针的数组,每个元素是一个字符指针,指向一个字符串,这些字符串就是命令行中的每一个参数
第三个:envp是字符指针的数组,数组的每一个原元素是一个指向一个环境变量(字符串)的字符指针

#include <stdlib.h>

1.putenv和getenv函数

putenv()用来改变或增加环境变量的内容. 参数string 的格式为name=value, 如果该环境变量原先存在, 则变量内容会依参数string 改变, 否则此参数内容会成为新的环境变量。

函数原型:int putenv(const char * string);

返回值:执行成功则返回0, 有错误发生则返回-1。

getenv()用来取得参数name 环境变量的内容. 参数name 为环境变量的名称, 如果该变量存在则会返回指向该内容的指针. 环境变量的格式为name=value.

函数原型:char * getenv(const char *name);

返回值:执行成功则返回指向该内容的指针, 找不到符合的环境变量名称则返回NULL.

  1. #include <stdlib.h>
  2. #include <stdio.h>
  3. int main()
  4. {
  5. char *p;
  6. if((p = getenv("USER")))
  7. printf("USER =%s\n",p);
  8. putenv("USER=test");
  9. printf("USER=%s\n", getenv("USER"));
  10. }
  11.  
  12. 执行:
  13. USER=root
  14. USER=test

使用示例

2. atoi函数

atoi() 函数用来将字符串转换成整数(int),其原型为:
int atoi (const char * str);

3.rand函数与srand函数

rand()函数是使用线性同余法做的,它并不是真的随机数,因为其周期特别长,所以在一定范围内可以看成随机的。 rand()函数不需要参数,它将会返回0到RAND_MAX之间的任意的整数。

srand()函数为初始化随机数发生器,用于设置rand()产生随机数时的种子。使用rand()函数时,如果我们不显示调用srand()的话,将默认为srand(1)。

srand()函数传入的参数seed为unsigned int类型,如果我们为srand设置某个固定的seed,那么虽然在同一次运行时,会有不同的随机数产生,但是对于这段程序的多次运行所得到的结果是不变的。所以通常我们会使用time(0)或time(NULL)的返回值作为seed。

  1. #include <stdlib.h>
  2. #include <stdio.h>
  3. #include <time.h>
  4. main()
  5. {
  6. int i,k;
  7.  
  8. /* 初始化随机数发生器 */
  9. srand( (unsigned)time( NULL ) );
  10. for( i = ; i < ;i++ )
  11. {
  12. k=rand()%+; //rand()%100表示取100以内的随机数,即取了随机数后再对100取余 x=rand()%(Y-X+1)+X
  13. printf( " k=%d\n", k );
  14. }
  15. }

使用示例

 #include <stdio.h>

1.stdin stdout stderr

标准输入(stdin)、标准输出(stdout)、标准错误(stderr)

stdin的默认是从键盘输入,stdout和stderr的默认是输出到屏幕上

stdout和stderr二者输出是有区别的: 
stdout输出和cout以及printf输出一样,带有缓存区的输出,先将数据输到缓存区里在遇到换行或者程序结束后输出到屏幕。 
stderr输出和cerr、flush函数类似,它也是错误输出,直接输出到屏幕,不经过缓存区,但是不同的是stderr不带有清除缓存区的功能。

2.fopen函数

fopen()是一个常用的函数,用来以指定的方式打开文件,其原型为:

FILE * fopen(const char * path, const char * mode);

【参数】path为包含了路径的文件名,mode为文件打开方式(模式)。

3.fscanf函数

fscanf():从文件指针fp指向的文件中,按format中对应的控制格式读取数据,并存储在agars对应的变量中;

原型: fscanf(FILE *fp, const char *format, agars)

4.fprintf函数

fprintf():将agars(参数表)内各项的值,按format(格式控制字符串)所表示的格式,将数据格式为字符串的形式写入到文件指针fp指向的文件中。

原型:fprintf(FILE *fp, const char *format, agars)

 5.fgets函数

原型  char *  fgets(char * s, int n,FILE *stream);

参数:

s: 字符型指针,指向存储读入数据的缓冲区的地址。

n: 从流中读入n-1个字符

stream : 指向读取的流。

返回值:

1. 当n<=0 时返回NULL,即空指针。

2. 当n=1 时,返回空串"".

3. 如果读入成功,则返回缓冲区的地址。

4. 如果读入错误或遇到文件结尾(EOF),则返回NULL.

 #include <string.h>

 1.strcmp函数

函数原型:int strcmp(const char *str1, const char *str2);

功能:比较两个字符串

当str1指向的字符串大于str2指向的字符串时,返回正数。

当str1指向的字符串等于str2指向的字符串时,返回0。

当str1指向的字符串小于str2指向的字符串时,返回负数。

2.strcpy 函数

函数原型:char *strcpy(char *dest, const char *src);

功能:拷贝字符串src到目标字符串dest

3.strcat函数

函数原型:char *strcat(char *dest, const char *src);

功能:连接字符串,将字符串src连接在dest之后

4.strtok函数

字符串切割函数

函数原型:char *strtok(char *s, char *delim);

函数功能:把字符串s按照字符串delim进行分割,然后返回分割的结果。

5.memcpy函数

内存复制,它的功能是从src的开始位置拷贝n个字节的数据到dest。如果dest存在数据,将会被覆盖。memcpy函数的返回值是dest的指针。函数原型如下:

void *memcpy(void *dest, const void *src, size_t n);

 常见问题

1.编译error:cast from 'void*' to 'int' loses precision

从 void* 到 int 的转换丢失精度,此问题只会出现在X64位的Linux上,因为在64位的机器上指针占用8个字节,int 占用四个字节,所以才会出现这样的问题。

  1. char *ptr; //此后省略部分代码
  2. if( (int)ptr==- ) //出错地方
  3.  
  4. 改正为(longptr == -

2.编译warning:cast to pointer from integer of different size(从不同大小的整数转化为指针)

  1. 如果这样定义会出现如下warning提示:
  2. (void*)virt_to_bus(yuv_frames)
  3. warning: cast to pointer from integer of different size
  4.  
  5. 改为(void*)(long)virt_to_bus(yuv_frames)

参考文档:

C语言---main函数的实现

C语言putenv()函数和getenv()函数的使用详解

C语言的fopen()函数

stdout、stdin和stderr

C语言atoi()函数:将字符串转换成int(整数)

C语言之文件读写——fscanf(),fprintf()详解

C语言文件操作之fgets()

C语言常用字符串操作函数strcpy、strcat、strcmp、strlen、strchr、strstr的实现

c,c++中字符串处理函数strtok,strstr,strchr,strsub

C语言memcpy函数的用法

【C编程基础】C程序常用函数的更多相关文章

  1. 【MySQL基础总结】常用函数库

    常用函数库 数学函数 分类及含义 示例 字符串函数 分类及含义 示例 日期时间函数 分类及含义 示例 条件判断函数 分类及含义 示例 系统函数 分类及含义 加密函数 分类及定义 其他常用函数 分类及含 ...

  2. 1-1 编程基础 GCC程序编译

    GCC简介      Linux系统下的gcc是GNU推出的强大.性能优越的多平台编译器,是GNU的代表作之一.gcc可以在多种硬体平台上编译出可执行程序,其执行效率与一般的编译器相比平局效率要高20 ...

  3. VBS脚本编程(3)——常用函数

    数据类型转换函数 1.Hex 函数 返回表示十六进制数字值的字符串. Hex(number) number 参数是任意有效的表达式. 说明 如果 number 参数不是整数,则在进行运算前将其四舍五入 ...

  4. [C/C++基础] C语言常用函数memset的使用方法

    函数声明:void *memset(void *s, int ch, size_t n); 用途:为一段内存的每一个字节都赋予ch所代表的值,该值采用ASCII编码. 所属函数库:<memory ...

  5. 1-2 编程基础 GDB程序调试

    简介 GDB是GNU发布的一款功能强大的程序调试工具.GDB主要完成下面三个方面的功能: 1.启动被调试程序 2.让被调试的程序在指定的位置停住. 3.当程序被停住时,可以检查程序状态(如变量值). ...

  6. [C/C++基础] C语言常用函数sprintf和snprintf的使用方法

    Sprintf 函数声明:int sprintf(char *buffer, const char *format [, argument1, argument2, …]) 用途:将一段数据写入以地址 ...

  7. [C/C++基础] C语言常用函数strlen的使用方法

    函数声明:extern unsigned int strlen(char *s); 所属函数库:<string.h> 功能:返回s所指的字符串的长度,其中字符串必须以’\0’结尾 参数:s ...

  8. MSSQLServer基础04(常用函数)

    类型转换函数 CAST ( expression AS data_type) CONVERT ( data_type, expression,[style]) 对日期的转换.转换成各种国家格式的日期. ...

  9. Python 编程基础之高阶函数篇(一)

      高阶函数:能接受函数作为参数的函数. 如: f=abs def   add(x,y,f): return f(x)+f(y) 如果我们用:add(-5,9,f)来调用该高阶函数,则返回结果为:14 ...

随机推荐

  1. SELECT INTO和INSERT INTO SELECT的区别

    数据库中的数据复制备份 SELECT INTO: 形式: SELECT value1,value2,value3 INTO Table_2 FROM Table_1 Table_2表存在,报错:数据库 ...

  2. 【转载】PhpStudy修改Apache的端口号

    phpStudy是一个PHP调试环境的程序集成包.该程序包集成最新的Apache+PHP+MySQL+phpMyAdmin+ZendOptimizer,一次性安装,无须配置即可使用,是非常方便.好用的 ...

  3. 5.QT-QString类

    Qt中的字符串类 介绍 采用Unicode编码  采用隐式共享技术,节省内存和不必要的数据拷贝 隐式共享介于浅拷贝和深拷贝之间,当两个string对象赋值时,会实现浅拷贝(共享一块内存),如果某个对象 ...

  4. Java中net.sf.json包关于JSON与对象互转的坑

    在Web开发过程中离不开数据的交互,这就需要规定交互数据的相关格式,以便数据在客户端与服务器之间进行传递.数据的格式通常有2种:1.xml:2.JSON.通常来说都是使用JSON来传递数据.本文正是介 ...

  5. 应用分类&练手项目计划

    应用分类 练手项目 [应用] 通讯录 xx管理 聊天室 [组件] web容器 db 中间件

  6. JavaScript如何工作:内存管理+如何处理4个常见的内存泄漏

    摘要: 作者将自己常用的JavaScript模块分享给大家. 原文:JavaScript如何工作:内存管理+如何处理4个常见的内存泄漏 作者:前端小智 Fundebug经授权转载,版权归原作者所有. ...

  7. if判断

    <!-- 查询用户信息 --> <select id="queryUser3" parameterType="org.pine.mybatis.util ...

  8. bat文件传递参数

    %*是表示命令行传过来的参数,%1表示第一个参数,%2表示第二个参数,以此类推.如执行C:/>hello.bat hello world, %1取出来就是hello %2取出来就是world h ...

  9. JS之表单提交时编码类型enctype详解

    简介 form的enctype属性为编码方式,常用有两种:application/x-www-form-urlencoded和multipart/form-data,默认为application/x- ...

  10. SqlMapConfig配置加注解

    <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE configuration PUBLIC & ...