char函数

SGI-STL简记(九)-字符串(string/wstring)

徘徊边缘 提交于 2019-12-01 02:04:33
char_traits.h : __char_traits_base:字符特性模板基类: 内部重声明了char_type字符类型,int_type整型类型; 此外提供了多个静态成员函数,如: assign:分配函数,将源字符内容赋值给目标字符;此外还有一个重载版本,其将某个字符赋值给指定长度n的字符串缓冲区,即赋值n次(注意目标缓冲区大小不可小于n); eq:相等比较函数,比较两个参数字符内容,相等返回true,否则返回false; lt:小于比较函数,若左参数小于右参数则返回true,否则返回false; compare:比较函数,提供了比较字符串以及字符串比较长度n(两个比较字符串的长度不可比n小,否则可能抛出异常);for循环依次比较各个字符串索引下字符,若均相等则返回true,若前者小于后者返回-1,否则返回1; length;获取字符串长度,其做法为内部构造一个__nullchar,并将其依次与比较字符串的各个字符调用eq比较,直到调用返回true为止(有一个前提是该字符串一定要以结束符结尾,否则可能异常),此时累计长度即为字符串长度; find:查找指定字符串长度n下是否存在某个字符c,内部for依次查找调用eq比较字符串的各字符是否与查找字符c相等,若找到则返回该字符所在字符串的首地址,否则返回0(n不可比字符串的长度大); move

read、write 与recv、send区别 gethostname

社会主义新天地 提交于 2019-11-30 23:51:08
recv相对于read有什么区别呢? 其实它跟read函数功能一样,都可以从套接口缓冲区sockfd中取数据到buf,但是recv仅仅只能够用于套接口IO,并不能用于文件IO以及其它的IO,而read函数可以用于任何的IO; recv函数相比read函数多了一个flags参数,通过这个参数可以指定接收的行为,比较有用的两个选项是: 这个这次要学习的,它可以接收缓冲区中的数据,但是并不从缓冲区中清除,这是跟read函数有区别的地方,read函数一旦读取了,就会直接从缓冲区中清除。 readline实现 也就是实现按行读取,读取直到\n字符,实际上,它也能解决上节中提到的粘包问题,回顾下上节的粘包问题解决方案: 包尾加\r\n(ftp) 我们只要解释\n为止,表示前面是一个条合法的消息,对于readline的实现,可以有三种方案: ①、最简单的方案就是一个字符一个字符的读取,然后做判断是否有"\n",但是这种效率比较低,因为会多次掉用read或recv系统函数。 ②、用一个static变量保存接收到的数据进行缓存,在下次时从这个缓存变量中读取然后估"\n"判断。但是一旦用到了static变量,这意味着用到的函数是 不可重录函数【关于这个概念,可以参考博文:http://www.cnblogs.com/webor2006/p/3744002.html】 。 ③、偷窥的方法

从0开始自己用C语言写个shell__01_整体的框架以及fork和exec族函数的理解

守給你的承諾、 提交于 2019-11-30 22:55:33
最近才忙完了一个操作系统的作业,让我们用C语言实现一个Shell。总的来说,其实就是让我们 对系统调用有比较深的了解。 首先 介绍一下我的Shell 所实现的功能。 1.运行可执行程序 即输入某个 标志符号 使得其能在我的Shell中运行,并且不退出当前shell。 2.获得某个程序的中某个字符串的个数(其实就是调用了/bin/里面的grep) 3.使用管道,实现两个子进程之间的联系,当然不能连shell自己都退出了。。 4.定向输出到某个个文本文件中。 但是在这之前,我想先谈谈我对fork()这个函数的理解。 首先我们把最开始的程序叫做F,然后 我们开始运行这个 程序,让我们一条条指令运行!当我们的运行到fork的时候,我们OS将整个程序 复制出几乎完全一样的一个程序(子程序)!注意在此之前的命令已经执行完了,所有的数据空间中的数据都将被复制一份,供子程序使用( 包括fork()这个函数也会被复制一份 。)。注意是复制一份,并不是让子程序共用父程序的数据空间!(再直白一点就是同一个变量,你在子程序里面调用改变了他,但是当你在父程序里面打印出它时,数值仍然是改变前的)。 前面提到的父子程序,难免会让人产生很多疑惑!有人肯定会问:“你不是说我的父程序 和子程序是完全一样的吗?那我fork出一个子程序有什么用呢?反正都是干的同一件事" 或者问:“那我们怎么区分父子进程呢?”。

c语言中的const的作用及解析

偶尔善良 提交于 2019-11-30 20:55:33
有时候我们希望定义这样一种变量,它的值不能被改变,在整个作用域中都保持固定。例如,用一个变量来表示班级的最大人数,或者表示缓冲区的大小。为了满足这一要求,可以使用 const 关键字对变量加以限定: const int MaxNum = 100 ; //班级的最大人数 这样 MaxNum 的值就不能被修改了,任何对 MaxNum 赋值的行为都将引发错误: MaxNum = 90 ; //错误,试图向 const 变量写入数据 我们经常将 const 变量称为常量(Constant)。创建常量的格式通常为: const type name = value; const 和 type 都是用来修饰变量的,它们的位置可以互换,也就是将 type 放在 const 前面: type const name = value; 但我们通常采用第一种方式,不采用第二种方式。另外建议将常量名的首字母大写,以提醒程序员这是个常量。 由于常量一旦被创建后其值就不能再改变,所以常量必须在定义的同时赋值(初始化),后面的任何赋值行为都将引发错误。一如既往,初始化常量可以使用任意形式的表达式,如下所示: #include <stdio.h> int getNum () { return 100 ; } int main () { int n = 90 ; const int MaxNum1 = getNum

static_cast与dynamic_cast转换

时间秒杀一切 提交于 2019-11-30 17:14:22
一 C 语言中存在着两种类型转换: 隐式转换和显式转换 隐式转换:不同数据类型之间赋值和运算,函数调用传递参数……编译器完成 char ch; int i = ch; 显示转换:在类型前增加 :(Type)变量 对变量进行的转换。用户显式增加 char *pc = ( char *)pb; void *ps = ( void *)pa; 二 C++ 中的类型转换   通过这两种方式,C语言中大部分的类型转换都可以顺利进行。 至于能不能进行转换,转换后的结果如何,编译器不管需要用户自己去控制。   C++继承了C中的隐式和显式转换的方式。但这种转换并不是安全和严格的, 加上C++本身对象模型的复杂性,C++增加了四个显示转换的关键字。(C++是强类型语言) ( static_cast , dynamic_cast , const_static , reinterpret_cast ) 1 static_cast (1 )用于基本的数据类型转换(char ,int ),及指针之间的转换 test_enum type = test_enum_1; char a ; int b = static_cast < int >(a); char c = static_cast < char >(b); type = static_cast <test_enum>(b); char * pa =

字符串逆序打印

狂风中的少年 提交于 2019-11-30 16:51:47
版本1 两个指针从头到尾和从尾到头交换内容逆序 /*** str_reverse.c ***/ #include<stdio.h> #include<string.h> int main() { char buf[] = "abcdrfg"; int len = strlen(buf); char *p1 = buf; char *p2 = buf + len - 1; while(p1 < p2) { char c = *p1; *p1 = *p2; *p2 = c; ++p1; --p2; } printf("buf = %s\n",buf); return 0; } 版本2 使用函数接口封装 /*** str_reverse.c ***/ #include<stdio.h> #include<string.h> int my_reverse(char *str) { int iRet = -1; if(NULL == str) { return iRet; } char *buf = str; int len = strlen(buf); char *p1 = buf; char *p2 = buf + len - 1; while(p1 < p2) { char c = *p1; *p1 = *p2; *p2 = c; ++p1; --p2; } } int main()

2019-2020-1 20175223 《信息安全系统设计基础》MyOD

青春壹個敷衍的年華 提交于 2019-11-30 16:43:26
目录 一、要求 二、设计流程 1. 需求分析 2. 概要设计 伪代码 3. 详细设计 main.c tans_0x.c tans_pr.c tansp.h 三、编写Makefile,并制作动、静态库 四、创建对于 bin/myod 的链接 五、测试及结果 六、遇到的问题和解决过程 1. 段错误 (核心已转储) 2. 警告:比较指针和整数 3. 警告:隐式声明函数 4. 读取无字符或字符数小于16个的文件,输出乱码。 七、下载及码云链接 八、问题解决参考资料 目录 一、要求 编写myod.c,用 myod XXX 实现 Linux 下 od -tx -tc XXX 的功能。 复习 c 文件处理内容。 main 与其他分开,制作静态库和动态库。 编写 makefile。 提交测试代码和运行结果截图,要全屏,包含自己的学号信息。 提交博客,重点写遇到的问题和解决过程。 二、设计流程 1. 需求分析 执行 od -tx -tc 1.txt 的命令显示如下: [yogile@yogile-pc MyOD]$ od -tx -tc 1.txt 0000000 0a333231 0a333231 34340a0a 0a343434 1 2 3 \n 1 2 3 \n \n \n 4 4 4 4 4 \n 0000020 32330a0a 34323334 32330a32 34323334 \n

54-数组源码分析

蓝咒 提交于 2019-11-30 15:45:47
PHP中经常使用数组,使用数组最大的好处便是速度!读写都可以在O(1)内完成,因为它每个元素的大小都是一致的,只要知道下标,便可以瞬间计算出其对应的元素在内存中的位置,从而直接取出或者写入。那么内核中是如何实现的呢? PHP大部分功能,都是通过HashTable来实现,其中就包括数组。HashTable即具有双向链表的优点,同时具有能与数据匹敌的操作性能。PHP中的定义的变量保存在一个符号表里,而这个符号表其实就是一个HashTable,它的每一个元素都是一个zval*类型的变量。不仅如此,保存用户定义的函数、类、资源等的容器都是以HashTable的形式在内核中实现的。 下面分别来看在PHP、内核中如何定义数组。 PHP中定义数组: <?php $array = array(); $array["key"] = "values"; ?> 在内核中使用宏来实现: zval* array; array_init(array); add_assoc_string(array, "key", "value", 1); 将上述代码中的宏展开: zval* array; ALLOC_INIT_ZVAL(array); Z_TYPE_P(array) = IS_ARRAY; HashTable *h; ALLOC_HASHTABLE(h); Z_ARRVAL_P(array)=h; zend

54-数组源码分析

ⅰ亾dé卋堺 提交于 2019-11-30 15:45:47
PHP中经常使用数组,使用数组最大的好处便是速度!读写都可以在O(1)内完成,因为它每个元素的大小都是一致的,只要知道下标,便可以瞬间计算出其对应的元素在内存中的位置,从而直接取出或者写入。那么内核中是如何实现的呢? PHP大部分功能,都是通过HashTable来实现,其中就包括数组。HashTable即具有双向链表的优点,同时具有能与数据匹敌的操作性能。PHP中的定义的变量保存在一个符号表里,而这个符号表其实就是一个HashTable,它的每一个元素都是一个zval*类型的变量。不仅如此,保存用户定义的函数、类、资源等的容器都是以HashTable的形式在内核中实现的。 下面分别来看在PHP、内核中如何定义数组。 PHP中定义数组: <?php $array = array(); $array["key"] = "values"; ?> 在内核中使用宏来实现: zval* array; array_init(array); add_assoc_string(array, "key", "value", 1); 将上述代码中的宏展开: zval* array; ALLOC_INIT_ZVAL(array); Z_TYPE_P(array) = IS_ARRAY; HashTable *h; ALLOC_HASHTABLE(h); Z_ARRVAL_P(array)=h; zend

oracle游标的使用方法

帅比萌擦擦* 提交于 2019-11-30 14:46:22
oracle游标的使用方法: ①、定义游标 cursor ②、打开游标 open ③、提取游标 fetch ④、关闭游标 close declare --类型定义 cursor c_job is select empno,ename,job,sal from emp where job='MANAGER'; --定义一个游标变量 c_row c_job%rowtype; begin open c_job; loop --提取一行数据到c_row fetch c_job into c_row; --判读是否提取到值,没取到值就退出 --取到值c_job%notfound 是false --取不到值c_job%notfound 是true exit when c_job%notfound; dbms_output.put_line(c_row.empno||'-'||c_row.ename||'-'||c_row.job||'-'||c_row.sal); end loop; --关闭游标 close c_job; end; create or replace function comm.fun_datediff (p_Component varchar2 , p_Subtranhend date, p_Minuend date) RETURN NUMBER IS /*********