嵌入式学习第一天 ---- C语言笔记

1.字符串定义在只读数据段;字符保存在局部变量栈中。
2.字符串库函数:
    int strlen(char *str);//求字符串str的长度
    char * strcat(char *str1,const char *str2);//将str2拼接到str1后面
    int strcmp(char *str1,char *str2);//比较str1和str2,相等返回0,str1大返回1,str1小返回-1
    char * strtok(char *str,char *fengefu);//分隔符为一个字符串,可以有多个分隔符,将str进行分割,返回分割后的字符串。通过:
    char *p=strtok(str,":,");
    printf("%s\n",p);
    while((p=strtok(NULL,":,"))!=NULL)
        printf("%s\n",p);
3.通过“”(双引号)定义的字符指针是一个常量,不可以修改该指针指向内容的值。
4.通过双引号“”定义的变量后面自动加上'\0'
5.函数指针 :跟函数定义头一样,区别是将函数名字改为(*p),如int sum(int,int)变为int (*p)(int,int)即可。
6.atoi:将数字字符串转化为整型
7.存放内存位置从低到高:
    正文段(text):代码段
    数据段(data):有两种,初始化数据段(初始化的全局变量和static变量);未初始化数据段(BSS:未初始化的全局变量和static变量)
    栈:局部变量
    堆:动态分配的内存
8.动态分配的指针变量本身保存在数据段或者栈中,而它指向的空间才保存在栈中。
9.static声明的静态变量,只初始化一次
10.extern可以引用外部文件的数据段中的数据,只需要在linux用gcc编译的时候,同时编译。而用static修饰的全局变量不可以被外部文件引用。引用格式:extern 类型 变量名。
11.typedef:重命名
12.函数返回值不可以是一个地址,因为局部变量地址只在函数调用的时候有用。
13.exit(0):要加头文件#include<stdlib.h>
14.union共用体
15.enum枚举
16.fopen:打开文件,模式有r、w、a、r+、w+、a+。例如fopen(fp,"r")
17.char fgetc(FILE *fp):从fp中获得一个字符
     char fputc(char c,FILE *fp):将ch字符写入fp中
18.ch=fgetc(stdin):从标准输入流中获得一个字符,即与scanf("%c",&ch);
   fputc(ch,stdout):将ch字符输出到显示屏上。即等价于printf("%c",ch);
19.ch=fgetc(fp):当文件读到错误或者文件尾时,返回一个EOF,即通过ch==EOF来进行判断
20.fclose(fp):关闭文件
21.stdin:标准输入流;stdout:标准输出流;stderr:标准错误流
22.#ifdef  ***  #endif:如果定义了
   #ifndef  *** #endif:如果没有定义
     #define:定义
     #undef:取消定义
     #if....#endif:条件预编译
23.已经定义的宏:
    __FILE__:当前文件名
    __LINE__:当前语句所在的行
    __DATE__:文件被编译的日期
    __TIME__:文件被编译的时间
    __STDC__:编译器是否遵循ASCII
24.fseek(fp,0,SEEK_SET):重新定位到文件开始
25.头文件有两种:<>和“”。
    <> :在系统默认的目录里寻找
    "" :在当前目录,如果找不到再到系统默认的目录里寻找
26.以下内存放置在.h文件中:
    ①:宏定义:用#define
    ②:结构,联合和枚举声明:struct、union、enum
    ③:typedef声明:重命名,增加一个别名
    ④:外部函数声明:extern
    ⑤:全局变量声明
27.格式化写到文件中:int fprintf( FILE *fp,char *format,…);
    fprintf(stdout, char *format,…)
28.格式化从文件中读取数据到变量中:int fscanf(FILE *fp,char *format,…)
     fscanf(stdin,char *format,…)
29.二进制文件/文本文件都可以读写,fread、fwrite:
    size_t fread(
    void *ptr,        //存放的地址
    size_t size,      //元素的大小
    size_t nmemb,     //元素的个数
    FILE *stream)     //文件指针
    返回值: >0 代表读到多少个元素  ;=0 表示没读到
     size_t fwrite(
    const void *ptr, //读取的地址
    size_t size,
    size_t nmemb,
    FILE *stream)
    返回值:成功为nmemb,错误小于nmemb
30.文件读写指针(光标):
int fseek(FILE *stream, long offset, int whence);
FILE *stream: 文件指针
long offset : 偏移量相对于 whence
int whence: SEEK_SET 文件头;SEEK_CUR 当前位置;SEEK_END 文件尾
31.void rewind(FILE *stream); ======> 等价于 : fseek(fp, 0,SEEK_SET);
32.long ftell(FILE *stream);  ======> 返回 文件位置指针的当前位置
33.获得文件的大小:
    fseek(fp,0,SEEK_END);size=ftell(fp);
34.int feof(FILE *stream): 判断stream文件流是否结束
    如果返回 1 ,测试文件结束了(第二次测试才正确)
    如果返回 0: 文件未结束
35.缓存区的大小: 1024
    1.可以通过 \n 清理缓存区:
    2.当缓存区满了,缓存区的内容也会输出
36.
    1. 预处理 :gcc -E color.c -o color.i
    2. 编译:    gcc -S color.i -o color.s,把.i 变成 汇编语言
    3. 汇编       gcc -c color.s -o color.o
    4. 链接:   gcc a.o b.o c.o -lmax -o target
37.int strlen(char *str);
char *strcat(char *dest, const char *src);
char *strncat(char *dest, const char *src, size_t n);
int strcmp(const char *s1, const char *s2);
int strncmp(const char *s1, const char *s2, size_t n);
char *strtok(char *str, const char *delim);
38.perror("");根据errno的值输出对应的错误信息
39.fflush(fp):刷新文件,把io缓冲区内容写入文件
40.setbuf(FILE* fp,char *buf):将fp的缓冲区设置为buf
41.sleep(10):休息10s
42.setbuf(stdout,buf):设置stdout的缓冲区为buf
43.setbuf(stdout,NULL):设置stdout没有缓冲区,即不需要文件结束就会输出
44.strchr:查找字符串中第一个出现的指定字符
     strrchr:查找字符串中最后出现的指定字符

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值