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的更多相关文章

  1. c 语言笔记 数组1

    1.数组可以有多维数组.c99支持动态数组,c11和c99之前不再支持. 2.数组 初始化一个后,后面的自动初始化为0,如果不初始化,都是垃圾值. 3.数组初始化 可以指定  ss[10]={0,2, ...

  2. go语言笔记——数组长度不可变,但是元素值是可变的!!!

    数组声明的格式是: var identifier [len]type 例如: var arr1 [5]int 在内存中的结构是: 对索引项为 i 的数组元素赋值可以这么操作:arr[i] = valu ...

  3. C语言笔记 06_作用域&数组

    作用域 任何一种编程中,作用域是程序中定义的变量所存在的区域,超过该区域变量就不能被访问.C 语言中有三个地方可以声明变量: 在函数或块内部的局部变量 在所有函数外部的全局变量 在形式参数的函数参数定 ...

  4. Go 语言笔记

    Go 语言笔记 基本概念 综述 Go 语言将静态语言的安全性和高效性与动态语言的易开发性进行有机结合,达到完美平衡. 设计者通过 goroutine 这种轻量级线程的概念来实现这个目标,然后通过 ch ...

  5. 013-结构体-C语言笔记

    013-结构体-C语言笔记 学习目录 1.[掌握]返回指针的函数 2.[掌握]指向函数的指针 3.[掌握]结构体的声明 4.[掌握]结构体与数组 5.[掌握]结构体与指针 6.[掌握]结构体的嵌套 7 ...

  6. 011-指针(上)-C语言笔记

    011-指针(上)-C语言笔记 学习目标 1.[掌握]字符串常用函数 2.[掌握]指针变量的声明 3.[掌握]指针变量的初始化 4.[掌握]函数与指针 5.[掌握]指针的数据类型 6.[掌握]多级指针 ...

  7. 010-字符串-C语言笔记

    010-字符串-C语言笔记 学习目标 1.[掌握]二维数组的声明和初始化 2.[掌握]遍历二维数组 3.[掌握]二维数组在内存中的存储 4.[掌握]二维数组与函数 5.[掌握]字符串 一.二维数组的声 ...

  8. 009-数组-C语言笔记

    009-数组-C语言笔记 学习目标 1.[掌握]数组的声明 2.[掌握]数组元素的赋值和调用 3.[掌握]数组的初始化 4.[掌握]数组的遍历 5.[掌握]数组在内存中的存储 6.[掌握]数组长度计算 ...

  9. Scala语言笔记 - 第三篇(容器方法篇)

    Scala语言笔记 - 第三篇(容器方法篇) 目录 Scala语言笔记 - 第三篇(容器方法篇) map和flapMap方法: ​ 最近研究了下scala语言,这个语言最强大的就是它强大的函数式编程( ...

随机推荐

  1. 编写SHELL脚本--编写简单脚本

    1.简单脚本文件hello.sh,内容如下 #!/bin/bash pwd ls -al 执行脚本:bash hello.sh  或者使用root命令:  ./hello.sh 2.接受用户参数 $0 ...

  2. CentOS 7 安装SVN服务端

    CentOS7下安装SVN服务 1. yum命令即可方便的完成安装# sudo yum install subversion 测试安装是否成功:# svnserve --version 更改svn的默 ...

  3. Nuget 配置文件的位置

    最近在 Visual Studio 中使用 Nuget 时,发现总是连接代理服务器,忘了什么时候配置的了,找了半天没找到配置位置,最后发现在这个地方: %appdata%\NuGet 找到 NuGet ...

  4. Eclipse和MyEclipse工程描述符.classpath和.project和.mymetadata详解(转)

    转自:http://blog.csdn.net/zygsee/archive/2009/12/22/5046100.aspx 有时候在一个Java工程里我们需要加入第三方jar包,这时你加入的最好相对 ...

  5. Instrumentation 功能介绍(javaagent)

    利用 Java 代码,即 java.lang.instrument 做动态 Instrumentation 是 Java SE 5 的新特性,它把 Java 的 instrument 功能从本地代码中 ...

  6. C++11 右值引用和转移语义

    新特性的目的 右值引用 (Rvalue Referene) 是 C++ 新标准 (C++11, 11 代表 2011 年 ) 中引入的新特性 , 它实现了转移语义 (Move Sementics) 和 ...

  7. MyBatis源码分析-基础支持层反射模块Reflector/ReflectorFactory

    本文主要介绍MyBatis的反射模块是如何实现的. MyBatis 反射的核心类Reflector,下面我先说明它的构造函数和成员变量.具体方法下面详解. org.apache.ibatis.refl ...

  8. 【iCore4 双核心板_ARM】例程四:USART实验——通过命令控制LED

    实验原理: 开发板上自带一片CH340芯片,完成本实验电脑需要安装CH340驱动, CH340的TXD连接STM32的GPIO(PXC7),CH340的RXD连接STM32的 GPIO(PC6),通过 ...

  9. Go Revel - Deployment(部署)

    ##概览 下面列出了部署的一些方法: 1.本地构建程序并拷贝至服务器 2.在服务器上获取更新代码,然后构建并运行 3.使用`Heroku`来管理部署 使用交互式的命令行会话来进行部署 - 通常需要一种 ...

  10. CSS实现响应式全屏背景图

    body { /* 加载背景图 */ background-image: url(images/background-photo.jpg); /* 背景图垂直.水平均居中 */ background- ...