[笔记] C/C++项目开发中与文件读写等相关的干货笔记

仅作为项目开发中的学习笔记,非系统学习的知识点,有误请指正。


1.常量指针:
    被指向的对象是常量,可以理解为常量的指针,指向的是个常量。
    int const* p;  const int* p;
  指针常量(指针本身是常量):
    指向的地址不能变。
    int* const p;
(技巧:将*读作指针即可区分代码)

 

2.fread():
    size_t fread(void *ptr, size_t size, size_t count, FILE *stream) 
    从给定流 stream 读取数据到 ptr 所指向的数组中。从给定流 stream 读取数据,
    最多读取count个项,每个项size个字节。
    如果调用成功返回实际读取到的项个数(小于或等于count),如果不成功或读到文件末尾返回 0。
    ptr -- 这是指向带有最小尺寸 size*nmemb 字节的内存块的指针。
    size -- 这是要读取的每个元素的大小,以字节为单位。
    count -- 这是元素的个数,每个元素的大小为 size 字节。
    stream -- 这是指向 FILE 对象的指针,该 FILE 对象指定了一个输入流。

 

3.fgets():    如fgets(dataline,80,fp);
    char *fgets(char *str, int n, FILE *stream) 从指定的流 stream 读取一行,
    并把它存储在 str 所指向的字符串内。读完一行会指向下一行开头!当读取 (n-1) 个字符时,或者读取到换行符时,
    或者到达文件末尾时,它会停止。
    str -- 这是指向一个字符数组的指针,该数组存储了要读取的字符串。
    n -- 这是要读取的最大字符数(包括最后的空字符)。通常是使用以 str 传递的数组长度。
    stream -- 这是指向 FILE 对象的指针,该 FILE 对象标识了要从中读取字符的流。

 

4.strstr():
    char *strstr(char *str1, char *str2);   
    判断str2是否为str1的子串,若是则返回str2在str1中首次出现的指针位置,若不是返回NULL;
    (小技巧:可利用该函数将指针定位到指定字符串处)

 

5.ftell():
    long ftell(FILE *stream);函数 ftell 用于得到文件位置指针当前位置相对于文件首的偏移字节数.
    使用fseek函数后再调用函数ftell()就能非常容易地确定文件的当前位置。

 

6.strncmp():
    int strncmp ( const char * str1, const char * str2, size_t n );
    功能是把 str1 和 str2 进行比较,最多比较前 n 个字节,若str1与str2的前n个字符相同,则返回0;
    若s1大于s2,则返回大于0的值;若s1 小于s2,则返回小于0的值。

 

7.menset()
    void *memset(void *s, int ch, size_t n);
    函数解释:将s中当前位置后面的n个字节 (typedef unsigned int size_t )用 ch 替换并返回 s 。
    将某一块内存中的内容全部设置为指定的值, 通常为新申请的内存做初始化工作。

 

8.sprimtf()
    int sprintf(char *str, const char *format, ...) 发送格式化输出到 str 所指向的字符串.

 

9.atoi():
    C 库函数 int atoi(const char *str) 把参数 str 所指向的字符串转换为一个整数(类型为 int 型)。

 

10.    VSCode导入#include <stdio.h>文件时提示错误。这是由于配置中没有指定依赖路径导致的,
    在c_cpp_properties.json中includePath的默认配置只有当前目录,需要将系统依赖加入。
    在命令行里面输入
    gcc -v -E -x c++ -
    在结果里面找到头文件目录,然后添加到includepath中。
    https://www.jianshu.com/p/a2a4bc46f30e

 

11.小技巧,在字符串后面加‘\0’:  str[strlen(str)] = '\0';

 

12. lstat函数
    函数名: lstat
    功 能: 获取一些文件相关的信息
    用 法: int lstat(const char *path, struct stat *buf);
    参数:
    path:文件路径名。
    filedes:文件描述词。
    成功执行时,返回0。失败返回-1

 

13.S_ISBLK(mode) 判断块设备

 

14.比较:strlen和sizeof
    strlen()计算字符串的长度,只能用char*做参数,以'\0'为字符串结束标志,不包括'/0'.是函数;
    sizeof()是分配的数组实际所占的内存空间大小,可以用类型做参数.是运算符。

 

15.strncpy()
    char *strncpy(char *dest, const char *src, int n),
    表示把src所指向的字符串中以src地址开始的前n个字节复制到dest所指的数组中,
    并返回被复制后的dest。

 

16.strncasecmp()
     int strcasecmp (const char *s1, const char *s2);用来比较参数s1和s2字符串前n个字符,
    比较时会自动忽略大小写的差异。
    返回值 若参数s1和s2字符串相等则返回0。s1大于s2则返回大于0 的值,s1 小于s2 则返回小于0的值。

 

17.
    ./ 当前目录
    ../ 父级目录
    / 根目录

 

18.access()
    int access(const char * pathname, int mode);
    pathname:需要检测的文件路劲名
    mode:需要测试的操作模式。
    函数头文件:#include <stdio.h> #include <unistd.h>
    mode:
    R_OK      测试读许可权
    W_OK      测试写许可权
    X_OK      测试执行许可权
    F_OK      测试文件是否存在
    成功执行时,返回0。失败返回-1,errno被设为某个值.
    https://blog.csdn.net/tigerjibo/article/details/11712039

 

19.feof(): 
    int feof(FILE *stream);
    检测流上的文件结束符,如果文件结束:返回非0值,文件未结束,返回0值
    例:feof(fp);

 

20.length()、size()、sizeof()三者的区别
    https://blog.csdn.net/qq_30534935/article/details/82191979

 

21.xml解析的运行
    g++ 源文件 -o 输出文件 -I"libxml2的头文件安装路径" -lxml2

    示例:
libxml2的头文件与库放到了/usr/local目录下

    gcc parserXmlFile.cpp -o parserXmlFile -I/usr/local/include/libxml2/ -L/usr/local/lib/libxml2 -lxml2
    
22.C语言字符串对比不能用“==”

 

23.remove()
    int remove(char *filename);用于删除指定的文件;filename为要删除的文件名,可以为一目录。
    成功则返回0,失败则返回-1.

24.注意:
    if(flag == 0)不同于if(flag = 0);前者是判断,后者是赋值为0,永远为0.

25.关于linux文件读写权限:
    查看命令:
        #ls   -l   filename
    如果显示类似如: 
    -rw-rw-rw-     1   root   root     .... 
    则表示任何用户都没有可执行权限(即使是root用户)
    解决方法: 
        #chmod   a+x   filename
    
    PS:用字符串来设定文件访问权限。其中读用 r 表示,写用 w 表示,
    执行用 x 表示;所有者用 u 表示,组用户用 g 表示,其他用户用 o 表示,
    所有用户用 a 表示。例子:
        chmod a+r,u+w,u+x,g+w a.txt
    完整参考:https://blog.csdn.net/zlxls/article/details/80203680

26.关于makefile静态库编译:
    法一:
    gcc -static -I/usr/local/libxml2/include/libxml2 -L/usr/local/libxml2/lib   codeHl.o option.o -o codeHl     -lxml2
    其中-I是制定的是include查找路径,-L指定静态库路径,静态库以.a为后缀,动态库以.so为后缀
    法二:
    在编译命令最后直接加上库路径/库名称:
    例如库在绝对目录/lib/libtest.a下,则:$(CC) $(CFLAGS) $^  -o $@  /lib/libtest.a
 

 

不定时更新ing

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值