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.对于字符串函数
char * strcpy(char * restrict s1 , const char * restrict s2);//将指针指向s2处的字符串 copy到s1指向的位置
char * strncpy(char * restrict s1 , const char * restrict s2,size_t n);//将指针指向s2处的字符串 copy到s1指
//向的位置 strncpy 多了一个 n 指的是有n个字符要拷贝,因为内存溢出的问题
char * strcat(char * restrict s1,const char * restrict s2);//字符串拼接 将s2拼接到s1,去掉空字符,返回s1地址
char * strncat(char * restrict s1,const char * restrict s2,size_t n);//字符串拼接 将s2拼接到s1,去掉空字符,返回s1地址,n个字符
int strcmp(const char * s1,const char * s2);//如果s1机器排序在s2后面,返回正数,如果s1排序在s2之前,返回负数,相等返回0
//机器排序?两个字符串首字符 a-z A-Z就是ascii 中实际位置的前后
int strncmp(const char * s1,const char * s2,size_t n);//如果s1机器排序在s2后面,返回正数,如果s1排序在s2之前,返回负数,
//相等返回0 比较n个字符后 停止 或者遇到空字符
char * strchr(const char * s ,int c);//返回首次出现 c字符的指针 未找到返回null
char * strpbrk(const char *s1 ,const char * s2);//如果s1包含s2任意字符,返回s1首地址,否则 null
char *strrchr(const char *s,int c);//c字符最后一次出现的位置,如果没有null
char *strstr(const char * s1,const char * s2);//s1 中s2出现的首位置,如果没有返回null
size_t strlen(const char *s);//不包括空字符的字符数
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);
很明显 前两个确定要转换字符串的区间,后面是什么进制。
c语言笔记 数组2的更多相关文章
- c 语言笔记 数组1
1.数组可以有多维数组.c99支持动态数组,c11和c99之前不再支持. 2.数组 初始化一个后,后面的自动初始化为0,如果不初始化,都是垃圾值. 3.数组初始化 可以指定 ss[10]={0,2, ...
- go语言笔记——数组长度不可变,但是元素值是可变的!!!
数组声明的格式是: var identifier [len]type 例如: var arr1 [5]int 在内存中的结构是: 对索引项为 i 的数组元素赋值可以这么操作:arr[i] = valu ...
- C语言笔记 06_作用域&数组
作用域 任何一种编程中,作用域是程序中定义的变量所存在的区域,超过该区域变量就不能被访问.C 语言中有三个地方可以声明变量: 在函数或块内部的局部变量 在所有函数外部的全局变量 在形式参数的函数参数定 ...
- Go 语言笔记
Go 语言笔记 基本概念 综述 Go 语言将静态语言的安全性和高效性与动态语言的易开发性进行有机结合,达到完美平衡. 设计者通过 goroutine 这种轻量级线程的概念来实现这个目标,然后通过 ch ...
- 013-结构体-C语言笔记
013-结构体-C语言笔记 学习目录 1.[掌握]返回指针的函数 2.[掌握]指向函数的指针 3.[掌握]结构体的声明 4.[掌握]结构体与数组 5.[掌握]结构体与指针 6.[掌握]结构体的嵌套 7 ...
- 011-指针(上)-C语言笔记
011-指针(上)-C语言笔记 学习目标 1.[掌握]字符串常用函数 2.[掌握]指针变量的声明 3.[掌握]指针变量的初始化 4.[掌握]函数与指针 5.[掌握]指针的数据类型 6.[掌握]多级指针 ...
- 010-字符串-C语言笔记
010-字符串-C语言笔记 学习目标 1.[掌握]二维数组的声明和初始化 2.[掌握]遍历二维数组 3.[掌握]二维数组在内存中的存储 4.[掌握]二维数组与函数 5.[掌握]字符串 一.二维数组的声 ...
- 009-数组-C语言笔记
009-数组-C语言笔记 学习目标 1.[掌握]数组的声明 2.[掌握]数组元素的赋值和调用 3.[掌握]数组的初始化 4.[掌握]数组的遍历 5.[掌握]数组在内存中的存储 6.[掌握]数组长度计算 ...
- Scala语言笔记 - 第三篇(容器方法篇)
Scala语言笔记 - 第三篇(容器方法篇) 目录 Scala语言笔记 - 第三篇(容器方法篇) map和flapMap方法: 最近研究了下scala语言,这个语言最强大的就是它强大的函数式编程( ...
随机推荐
- java 自动化测试平台构建思想
很多人迷信于自动化测试平台,认为这玩意是万能的,对于测试人员,不需要写代码,只需要在平台上选择一下,输入一点参数,就能达到测试的目的.想法是不错的,但关键在于实现这个平台的过程,这个就需要一个WEB开 ...
- Redis相关技巧
一. 内存占用过大,设置内存最大上限. vi /etc/redis.conf maxmemory 1g maxmemory-policy allkeys-lru (慎用) appendonly yes ...
- MySQL累积求和
有如下表 id money 1 10 2 20 3 30 4 40 求出如下数据 id money cum 1 10 10 2 20 30 3 30 60 4 40 100 建表 CREA ...
- Socket网络编程--网络爬虫(4)
上一小节我们已经实现了获取博客园最近博客的200页里面的用户名,并保存在一个map中.一开始是想通过这个用户名然后构造一个博客地址.然后在这个地址中查找心得用户名,但是后来发现这个的效率不是很高,虽然 ...
- pandas DataFrame(3)-轴
和numpy数组(5)-二维数组的轴一样,pandas DataFrame也有轴的概念,决定了方法是对行应用还是对列应用: 以下面这个数据为例说明: 这个数据是5个车站10天内的客流数据: rider ...
- Kylin 与 Spark SQL相比,有哪些差异和优势?
SparkSQL本质上是基于DAG模型的MPP.而Kylin核心是Cube(多维立方体).关于MPP和Cube预处理的差异,重复如下: > MPP [1] 的基本思路是增加机器来并行计算,从而提 ...
- opencv2/nonfree/nonfree.hpp:没有那个文件或目录
致命错误: opencv2/nonfree/nonfree.hpp:没有那个文件或目录 fatal error: opencv2/nonfree/nonfree.hpp: No such file o ...
- react实现多行文本超出加省略号
http://www.css88.com/archives/5206 overflow : hidden; text-overflow: ellipsis; display: -webkit-box; ...
- supervisor的command执行两条命令
如下supervisor的进程的comand配置参数只能写一个命令 1.要执行多条命令,可以写个sh文件包含多条命令,然后sh -x xxxx.sh,但这样又多了一个文件, 2.把所有命令放在字符 ...
- [Tensorflow] Object Detection API - retrain mobileNet
前言 一.专注话题 重点话题 Retrain mobileNet (transfer learning). Train your own Object Detector. 这部分讲理论,下一篇讲实践. ...