仅作为项目开发中的学习笔记,非系统学习的知识点,有误请指正。
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