c语言笔记 数组2

15. c99以前一直使用 gets 和 puts来输入输出字符串,但是gets因为无法获知内存大小,容易出现内存溢出(对此c99对gets,采取保留态势,c11直接废除,但是某些编译器仍然默认可以使用)。 gets会等待输入换行结束,但是gets返回的字符串却删除了换行符,对应的puts在末未添加了换行符。总之get put类函数,总是一行一行打印。fgets和fputs用来替代目前的函数,主要是定义了长度这个参数,还有第三个参数 stdio 和stdout(麻烦)。fgets 与gets不同,保留了用户输入的回车键,并在字符串末尾加上了‘/0’。fputs对应的不再加上换行符。特别的 fputs在目标内存满的时候,会返回空指针,这个特性使它应用起来要方便的多。对应的c11增加了 gets_s 和 s_gets两个函数,使字符串的情形更为复杂。gets_s:1.只能作为标准输入,不需要fgets第三个参数 2.丢弃换行符 3.内存溢出后,首先‘/0’替换首字符,丢弃以后的所有数据,直到出现换行符或者文件结尾,返回空指针。(what? 这些特性也造成了,该函数即便出错,用户也无法察觉)  s_gets :1.用空字符替代换行符 2.读取一部分数据丢弃其他数据 3.不再返回 null指针。  有缺陷,如果输入丢失了换行,用户完全不知道发生了什么错误,还是不要看的好。(C11搞出了这两个东西?)scanf 你可理解为抓取一个个字符,put get对象是字符串。

16.对于字符串函数

  1 char * strcpy(char * restrict s1 , const char * restrict s2);//将指针指向s2处的字符串 copy到s1指向的位置
  2 char * strncpy(char * restrict s1 , const char * restrict s2,size_t n);//将指针指向s2处的字符串 copy到s1指
  3 //向的位置 strncpy  多了一个 n 指的是有n个字符要拷贝,因为内存溢出的问题
  4 char * strcat(char * restrict s1,const char * restrict s2);//字符串拼接 将s2拼接到s1,去掉空字符,返回s1地址
  5 char * strncat(char * restrict s1,const char * restrict s2,size_t n);//字符串拼接 将s2拼接到s1,去掉空字符,返回s1地址,n个字符
  6 int strcmp(const char * s1,const char * s2);//如果s1机器排序在s2后面,返回正数,如果s1排序在s2之前,返回负数,相等返回0
  7 //机器排序?两个字符串首字符 a-z A-Z就是ascii 中实际位置的前后
  8 int strncmp(const char * s1,const char * s2,size_t n);//如果s1机器排序在s2后面,返回正数,如果s1排序在s2之前,返回负数,
  9 //相等返回0 比较n个字符后 停止 或者遇到空字符
 10 char * strchr(const char * s ,int c);//返回首次出现 c字符的指针 未找到返回null
 11 char * strpbrk(const char *s1 ,const char * s2);//如果s1包含s2任意字符,返回s1首地址,否则 null
 12 char *strrchr(const char *s,int c);//c字符最后一次出现的位置,如果没有null
 13 char  *strstr(const char * s1,const char * s2);//s1 中s2出现的首位置,如果没有返回null
 14 size_t strlen(const char *s);//不包括空字符的字符数
 15 

17.关于几个字符串处理为整数的函数  早期为 atoi 可以有效识别数字 比如“43asd”也能识别为43,atof转换为double ,atol转换为long。但是这种转换是有缺陷的,对没有数字字符串的将返回0,不够安全。

另外提供了新的智能函数,strtol 把字符串转换为long型,strtoul转换为 unsigned long,同样的还有strtod double.例子:long strtol(const * restrict nptr,char ** restrict endptr,int base);

很明显 前两个确定要转换字符串的区间,后面是什么进制。

原文地址:https://www.cnblogs.com/polar-lights/p/8443386.html