sprintf

PHP-不同Str 拼接方法性能对比

不打扰是莪最后的温柔 提交于 2020-04-30 15:07:35
问题 在PHP中,有多种字符串拼接的方式可供选择,共有: 1 . , .= , sprintf, vprintf, join, implode 那么,那种才是最快的,或者那种才是最适合业务使用的,需要进一步探究。 用到的工具 PHP7.1.16 PHP5.4 VLD XDebug phpunit4 以及自己写的一个Benchmark工具。 PHP54环境 PHPUnit测试结果 使用以下代码,分别测试了上面的几种字符串拼接方式(拼接方式无法对变量赋值,故用处不大,没有测,join和implode是相等的,仅仅测试了其中一个) 测试条件:2C-4T 8G 拼接5W次,重复10次取平均值。 测试代码如下: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 <?php /** *

重定向

北慕城南 提交于 2020-04-30 14:46:39
通用格式 [n] 表示 fd[n] {varname} > word 表示 fd[varname] ,存储的文件对象是 word fd[0]存储的文件对象是stdin;fd[1]存储的文件对象是stdout;fd[2]存储的文件对象是stderr; [n]>&[m] 表示的 fd[n]=fd[m] .所以对于 2>&1 等价于 fd[2]=fd[1] 如上所示的对应:修改后 fd[2]==stdout;fd[1]==stdout ,即输出错误输出到标准输出。 2&>word 表示 >word 2>&1 等价于 fd[1]=word;fd[2]=fd[1] 则 fd[2]==word,fd[1]==word ,所以标准输出,标准错误都输出到文件 word 中。 [n]&>- 这种表示关闭 fd[n] 所对应的文件对象 文件描述符 。 [n]&>digit- 表示 digit顶替n 然后关掉 n <> 同时输入输出 sprintf ,最后文件啥样不可而知。 解析顺序 重定向在指令之前处理,所以你可以在一条指令的任意位置进行重定向。 >1 ls 也是可以的 ls >1 -l 也是可以的 重定向的处理从左到右。 处理文件描述符 使用 tcp 进行通讯 每次重定向之后 0,1,2 都会复原。 默认值 [n]< 的 n 默认为 0 [n]> 的 n 默认为 1 [n]<< 的 n 默认为 0

PTA 1005 Spell It Right

拥有回忆 提交于 2020-04-29 15:43:05
题目翻译 现在有一个 非负 整数N,你的任务是计算它的每一位上的数字的和并且输出和的每一位上的数字的英文。 输入格式 每一个输入文件包含一个测试样例。每一个样例在一行上输出一个N( \(\leq100^{100}\) ). 输出格式 对于每一个测试样例,在一行中输出和的每一位的英文单词。每两个连续的单词之间必须有一个空格,行尾没有空格。 样例输入 12345 样例输出 one five 分析:题目很短,理解起来应该也不难。大意就是先把N的每一位上的数加起来,再把这个和的每一位对应的英文单词输出。我们可以先把从0到9对应的英文单词存在一个字符串常量数组里,以后直接读这个数组就行。之后用一个循环来求和,然后读取这个和的每一位。我这里用了一个sprintf函数,把这个和转成了字符串类型(其实是因为懒得写取余的循环……),这个函数还是挺方便的,建议大家了解一下。 ​我们经常用的printf()函数是把给定的数据类型转成字符串类型输出到标准输出流中,也就是控制台里。sprintf()函数就是把这个字符串输出到指定的字符数组里,很适合做这种题目。 ​之后就是逐个读取这个字符串的每一个字符,把它减掉‘0’就是对应的数值了。 #include <stdio.h> #include <iostream> #include <string> #include <stdlib.h> using

PTA 1005 Spell It Right

淺唱寂寞╮ 提交于 2020-04-29 15:42:32
题目翻译 现在有一个 非负 整数N,你的任务是计算它的每一位上的数字的和并且输出和的每一位上的数字的英文。 输入格式 每一个输入文件包含一个测试样例。每一个样例在一行上输出一个N( \(\leq100^{100}\) ). 输出格式 对于每一个测试样例,在一行中输出和的每一位的英文单词。每两个连续的单词之间必须有一个空格,行尾没有空格。 样例输入 12345 样例输出 one five 分析:题目很短,理解起来应该也不难。大意就是先把N的每一位上的数加起来,再把这个和的每一位对应的英文单词输出。我们可以先把从0到9对应的英文单词存在一个字符串常量数组里,以后直接读这个数组就行。之后用一个循环来求和,然后读取这个和的每一位。我这里用了一个sprintf函数,把这个和转成了字符串类型(其实是因为懒得写取余的循环……),这个函数还是挺方便的,建议大家了解一下。 ​我们经常用的printf()函数是把给定的数据类型转成字符串类型输出到标准输出流中,也就是控制台里。sprintf()函数就是把这个字符串输出到指定的字符数组里,很适合做这种题目。 ​之后就是逐个读取这个字符串的每一个字符,把它减掉‘0’就是对应的数值了。 #include <stdio.h> #include <iostream> #include <string> #include <stdlib.h> using

C语言(北京理工大学MOOC 上)

落爺英雄遲暮 提交于 2020-04-29 12:50:48
1、矩阵的鞍点 1 #include <stdio.h> 2 #define N 32 3 int main() 4 { 5 int m,n; 6 scanf( " %d %d " ,&m,& n); 7 8 int a[N][N]={ 0 }; 9 for ( int i= 0 ;i<m;++ i){ 10 for ( int j= 0 ;j<n;++ j){ 11 scanf( " %d " ,& a[i][j]); 12 } 13 } 14 15 int find = 0 ; 16 for ( int i= 0 ;i<m;++ i) 17 { 18 // 判断行最大值 19 int rowPos=i,columnPos= 0 ,flag = 1 ; 20 for ( int j= 1 ;j<n;++ j) 21 { 22 if (a[i][j]> a[rowPos][columnPos]){ 23 rowPos = i; 24 columnPos = j; 25 } 26 } 27 // 判断行最大值,在所在列是否为最小值 28 for ( int k= 0 ;k<m;++ k){ 29 if (a[k][columnPos]< a[rowPos][columnPos]){ 30 flag = 0 ; 31 break ; 32 } 33 } 34 //

2019DDCTF WEB 笔记(PHP反序列化&&GD库渲染文件上传绕过)

冷暖自知 提交于 2020-04-27 06:50:44
滴~ 先上大佬的WP( https://impakho.com/post/ddctf-2019-writeup ) ~~~膜 第一题设计的是base64和文件包含,源码泄露和变量覆盖并且脑洞的一题目 引用这位大佬的WP里的图片( https://www.cnblogs.com/sijidou/p/10725355.html ) 题目的url看上去就像是文件包含,确实。 先是base64第二解码,然后是16进制再转字符串,是flag.jpg,呢么可以用php://filter读取下源码 源码里有博客链接,进去后找到个.practice.txt.swp这样的文章中的实例提示。呢么就尝试这进入,然后绕过正则对!的限制 <? php /* * https://blog.csdn.net/FengBanLiuYun/article/details/80616607 * Date: July 4,2018 */ error_reporting ( E_ALL || ~ E_NOTICE ); header ('content-type:text/html;charset=utf-8' ); if (! isset ( $_GET ['jpg' ])) header ('Refresh:0;url=./index.php?jpg=TmpZMlF6WXhOamN5UlRaQk56QTJOdz09'

47.Linux-DEVICE_ATTR()介绍及使用示例

北慕城南 提交于 2020-04-24 23:06:53
1.介绍 使用 DEVICE_ATTR ,可以实现驱动在sys目录自动创建文件,我们只需要实现show和store函数即可. 然后在应用层就能通过cat和echo命令来对sys创建出来的文件进行读写驱动设备,实现交互. 2.DEVICE_ATTR()宏定义 DEVICE_ATTR() 定义位于include/linux/device.h中,定义如下所示: #define DEVICE_ATTR(_name, _mode, _show, _store) \ struct device_attribute dev_attr_##_name = __ATTR(_name, _mode, _show, _store) 其中_mode定义如下: 400 拥有者能够读,其他任何人不能进行任何操作; 644 拥有者都能够读,但只有拥有者可以编辑; 660 拥有者和组用户都可读和写,其他人不能进行任何操作; 664 所有人都可读,但只有拥有者和组用户可编辑; 700 拥有者能够读、写和执行,其他用户不能任何操作; 744 所有人都能读,但只有拥有者才能编辑和执行; 755 所有人都能读和执行,但只有拥有者才能编辑; 777 所有人都能读、写和执行(该设置通常不是好想法)。 当然也可以用S_IWUSR(用户可写),S_IRUSR(用户可读)等宏代替. 以下面DEVICE_ATTR()定义为例:

Linux内核宏DEVICE_ATTR使用

会有一股神秘感。 提交于 2020-04-24 18:42:33
1、前言 在Linux驱动程序编写中,使用DEVICE_ATTR宏,可以定义一个struct device_attribute设备属性,并使用sysfs的API函数,便可以在设备目录下创建出属性文件,当我们在驱动程序中实现了show和store函数后,便可以使用cat和echo命令对创建出来的设备属性文件进行读写,从而达到控制设备的功能。 2、宏DEVICE_ATTR定义 在讲解DEVICE_ATTR宏之前,先了解一些基本的结构体,首先是struct attribute结构体,其定义在include/linux/device.h中,结构体定义如下所示: struct attribute { const char * name; umode_t mode; #ifdef CONFIG_DEBUG_LOCK_ALLOC bool ignore_lockdep: 1 ; struct lock_class_key * key; struct lock_class_key skey; #endif }; 该结构体有两个重要的成员,分别是name和mode,其中name代表属性的名称,一般表示为文件名,mode代表该属性的读写权限,也就是属性文件的读写权限。 关于文件的权限详解,可以参考下面的链接: https://blog.csdn.net/DLUTBruceZhang/article

C语言时间操作

家住魔仙堡 提交于 2020-04-21 02:42:24
UNIX操作系统根据计算机产生的年代和应用采用1970年1月1日作为UNIX的纪元时间,1970年1月1日0点作为计算机表示时间的是中间点,将从1970年1月1日开始经过的秒数用一个整数存放,这种高效简洁的时间表示方法被称为“Unix时间纪元”,向左和向右偏移都可以得到更早或者更后的时间。 在实际开发中,对日期和时间的操作场景非常多,例如程序启动和退出的时间,程序执行任务的时间,数据生成的时间,数据处理的各环节的时间等,无处不在。 在学习时间之前,请把Linux操作系统的时区设置为中国上海时间。 一、time_t别名 在C语言中,用time_t来表示时间数据类型,它是一个long(长整数)类型的别名,在time.h文件中定义,表示一个日历时间,是从1970年1月1日0时0分0秒到现在的秒数。 typedef long time_t; 二、time库函数 time函数的用途是返回一个值,也就是从1970年1月1日0时0分0秒到现在的秒数。 time函数是C语言标准库中的函数,在time.h文件中声明。 time_t time(time_t *t); time函数有两种调用方法: time_t tnow; tnow =time(0); // 将空地址传递给time函数,并将time返回值赋给变量tnow 或 time(&tnow); // 将变量tnow的地址作为参数传递给time函数

C语言格式化输出

纵然是瞬间 提交于 2020-04-19 10:41:40
一、格式化输出 格式化输出的函数有printf、sprintf和snprintf等,功能略有不同,使用方法大同小异,本章节我们先以printf为例。 对于 printf 函数,相信大家并不陌生。之所以称它为格式化输出函数,该函数的声名如下: int printf(const char *format, ...) 大家看到printf函数的声明就会有点懵,它参数的写法与我们之前学到的函数知识不一样,printf函数是一个“可变参数函数”(即函数参数的个数是可变的),可变参数函数的知识以后再介绍,现在只要知道怎么使用就行了。 printf函数的参数的个数和类型都是可变的,每一个参数的输出格式都有对应的格式说明符与之对应,从格式串的左端第1 个格式说明符对应第 1 个输出参数,第 2 个格式说明符对应第 2 个输出参数,第 3个格式说明符对应第 3 个输出参数,以此类推。 其中,格式说明符的形式如下(方括号 [] 中的项为可选项): %[flags][width][.prec] type 1、类型符(type) 它用以表示输出数据的类型,以下是常用类型的汇总,不常用的就不列了。 %hd、%d、%ld 以十进制、有符号的形式输出 short、int、long 类型的整数。 %hu、%u、%lu 以十进制、无符号的形式输出 short、int、long 类型的整数 %c 输出字符。 %lf