C笔记

  • const double PI = 3.1415 保护数据,使得PI不能被修改。

  • const int day[3] = [1, 2, 3]day[1] = 3 是会发生编译错误的。

  • double rates[2] = [1.1, 2.2]; const double * pd = rates;表明不能使用指针pd去改变它所指向的值, 但可以让pd指向别处

    *pd = 3.3 // 不允许

    pd[1] = 4.4 //不允许

    rates[0] = 3.3 // 允许

    pd++; //让pd指向rates[1],允许

  • 首先,把const数据或非const数据的地址初始化为指向const的指针或为其赋值是合法的;但是,只能把const数据的地址给普通指针。

  • const可以声明并初始化一个个不能指向别处的指针。如 double * const pc = rates; 指针pc不能指向别处。

  • 最后,在创建指针时,还可以使用const两次,该指针既不能改别它所指向的地址,也不能改变指向地址上的值。

fgets(char *restrict, int, FILE *)gets(char *) 区别

  • fget()函数的第二个参数指明了读入字符的最大数量。如果该参数的值是n,那么fgets()将读入 n-1 个字符,或者读到遇到的第一个换行符为止。
  • 如果fgets()读到一个换行符,会把它存储在字符串中。这点与get()不同,get()会丢弃换行符。
  • 如果fget()函数的第3个参数指明要读入的文件。如果读入从键盘输入的数据,则以stdin作为参数,该标识符定义在stdio.h中。

gets_s()fgets()区别

  • gets_s()是C11中新增的,并且是 stdio.h输入/输出函数系列的可选扩展。
  • gets_s()只从标准输入中读取数据,所以不需要第3个参数。
  • 如果gets_s()读到换行符,会丢弃它而不是存储它。
  • 如果gets_s()读到最大字符数都没有读到换行符,会执行一下几步。首先把目标数组中的首字符设置为空字符,读取并丢弃随后的输入知道读到换行符或文件结尾,然后返回空指针。接着,调用依赖实现的“处理函数”(或者你选择的其它函数),可能会中止或退出程序。

string.h中的常用字符串处理函数

  • size_t strlen(const char * s)函数用于统计字符串的长度(其实是统计字符串开始到\0的字符个数)。
  • char *strcat(char * restrict s1, const * restrict s2)函数接受两个字符串座位参数,并把第2个字符串的备份附加在第1个字符串末位,并把拼接后形成的新字符串座位第1个字符串,第2个字符串不变。(拼接字符,要保证第1个字符串的长度要够,而且返回的字符串地址,就是第一个字符串地址)。缺点:不会检查第1个字符串是否会溢出。
  • char *strncat(char * restrict s1, const * restrict s2, size_t n)该函数的第3个参数指定了最大添加字符数,在添加到size_t个字符或者遇到空字符时停止。
  • int strcmp(char *, char *)函数比较字符串的内容是否相等,而不是指针。如果字符串相同,函数返回0。如果遇到不想等的字符,如比较"A"和"B"则返回"-1",如比较"B"和"A"则返回"1"。
  • int strncmp(char *, char *, size_t n)函数在比较两个字符串时,可以比较到字符不同的地方,也可以只比较size_t参数制定的字符数。
  • char *strcpy(char *, char *)是将第2个参数中的字符串内容,拷贝到第一个参数中,一定要先给第1个参数分配地址空间,不然可能会出现问题,同时strcpy()不会检查目标空间是否能容纳源字符串的副本。(一般字符串变量是一个指向字符串的指针,pts2=pts1拷贝的是字符串的地址,而不是字符串的内容)
  • char *strncpy(char *, char *, size_t)size_t指明可拷贝的最大字符数。
  • sprintf(char *restrict, const char *restrict, ...)函数是声明在stdio.h中,该函数是将数据写入字符串,第一个参数是目标字符串的地址,其它参数和printf()相同,即格式字符串和待写入项的列表。
  • char *strchr(const char * s, int c)如果 s 字符串中含有 c 字符,该函数返回指向 s 字符串首位置的指针(末尾的空字符也是字符串的一部分,在查找范围内);如果在字符串 s 中未找到 c 字符,该函数则返回空指针。
  • char *strpbrk(const char * s1, const char * s2),如果 s1 字符串中包含 s2 字符串中的任意字符,则该函数返回指向 s1 字符串首位置的指针,如果在 s1 中未找到任何 s2 字符串中的字符,则返回空字符。
  • char *strrchr(const char * s, int c)函数返回 s 字符串中 c 字符的最后一次出现的位置(末尾的空字符也是字符串的一部分,在查找范围内)。如果未找到 c 字符,则返回空指针。
  • char *strstr(const char * s1, const char * s2)该函数返回指向 s1 字符串中 s2 字符串出现的首位置。如果在 s1 中没有找到 s2 ,则返回空字符。

你可能感兴趣的:(C笔记)