首页
闲言碎语
个人导航
文章归档
友情链接
留言簿
关于
更多
网络电视
云盘
统计
推荐
付费资源
朋友圈集赞
二维码生成
音乐下载
Search
1
全网首发-小米AX6000路由器解锁ssh并固化ssh+2.5G有线mesh组网+公网访问路由后台+红米AX6/小米AX6/AX3600/AX6000/AX9000全系列适用
6,745 阅读
2
青龙面板必装依赖及青龙各种问题解决
3,916 阅读
3
NAS一键批量清除重复文件
3,535 阅读
4
群辉DSM7.0.1安装bootstrap后解决wget: error while loading shared libraries: libgnuintl.so.8: cannot open shared object file: No such file or directory
1,598 阅读
5
《爱情公寓4》全集高清迅雷下载
894 阅读
闲言碎语
学习
福利
技术百科
WordPress
Typecho
软件资源
iPhone
Android
PC软件
CODE
C
VB
PHP
NAS
青龙
登录
Search
标签搜索
wordpress
News
iphone
vb
iOS
technology
渗透
QQ
php
talk
JavaScript
hack
Typecho
NAS
福利
c++
diy
c
免杀
评测
Jonty
累计撰写
275
篇文章
累计收到
976
条评论
今日撰写
0
篇文章
首页
栏目
闲言碎语
学习
福利
技术百科
WordPress
Typecho
软件资源
iPhone
Android
PC软件
CODE
C
VB
PHP
NAS
青龙
页面
闲言碎语
个人导航
文章归档
友情链接
留言簿
关于
网络电视
云盘
统计
推荐
付费资源
朋友圈集赞
二维码生成
音乐下载
用户登录
登录
搜索到
35
篇与
的结果
2017-05-11
c自带qsort函数用法
qsort函数用法功 能: 使用快速排序例程进行排序用 法: void qsort(void *base, int nelem, int width, int (*fcmp)(const void *,const void *)); 各参数:1 待排序数组首地址 2 数组中待排序元素数量 3 各元素的占用空间大小 4 指向函数的指针用于确定排序的顺序 排序方法有很多种, 选择排序,冒泡排序,归并排序,快速排序等。 看名字都知道快速排序 是目前公认的一种比较好的排序算法(我没听书速度比这快的了,特殊场合例外),比选择排序,冒泡排序都要快。这是因为他速度很快,所以系统也在库里实现这个算法,便于我们的使用。 这就是qsort。qsort 要求提供一个 比较函数,是为了做到通用性更好一点。比如你不仅仅的是要排序一个数字而已,可能你要用来排序几个数字 ,比如有一个结构 struct num { int a; int b; }; 然后我有一个num 类型的数组, num dddd[100]; 我想给 dddd这个数组排序,那怎么办? 我想让 a +b 最大的num元素排在数组的最前面,那又怎么办? 这都可以通过定义比较函数来做到的。 比较函数的作用就是给qsort指明 元素的大小是怎么比较的。 像这样的比较函数 inline int MyCmp(const void* a, const void* b) 都是有两个元素 作为参数,返回一个int 值, 如果 比较函数返回大于0,qsort就认为 a>b , 如果比较函数返回等于0 qsort就认为a 和b 这两个元素相等,返回小于零 qsort就认为 ab),你比较函数却返回一个 -1 (小于零的)那么qsort认为a<本文中排序都是采用的从小到大排序>一、对int类型数组排序int num[100]; Sample: int cmp ( const void *a , const void *b ) { return *(int *)a - *(int *)b; } qsort(num,100,sizeof(num[0]),cmp);二、对char类型数组排序(同int类型)char word[100]; Sample: int cmp( const void *a , const void *b ) { return *(char *)a - *(int *)b; } qsort(word,100,sizeof(word[0]),cmp);三、对double类型数组排序(特别要注意)double in[100]; int cmp( const void *a , const void *b ) { return *(double *)a > *(double *)b ? 1 : -1; } qsort(in,100,sizeof(in[0]),cmp); 四、对结构体一级排序struct In { double data; int other; }s[100] //按照data的值从小到大将结构体排序,关于结构体内的排序关键数据data的类型可以很多种, //参考上面的例子写 int cmp( const void *a ,const void *b) { return (*(In *)a).data > (*(In *)b).data ? 1 : -1; } qsort(s,100,sizeof(s[0]),cmp); 五、对结构体二级排序struct In { int x; int y; }s[100]; //按照x从小到大排序,当x相等时按照y从大到小排序 int cmp( const void *a , const void *b ) { struct In *c = (In *)a; struct In *d = (In *)b; if(c->x != d->x) return c->x - d->x; else return d->y - c->y; } qsort(s,100,sizeof(s[0]),cmp); 六、对字符串进行排序struct In { int data; char str[100]; }s[100]; //按照结构体中字符串str的字典顺序排序 int cmp ( const void *a , const void *b ) { return strcmp( (*(In *)a)-&gt;str , (*(In *)b)-&gt;str ); } qsort(s,100,sizeof(s[0]),cmp); 七、计算几何中求凸包的cmpint cmp(const void *a,const void *b) //重点cmp函数,把除了1点外的所有点,旋转角度排序 { struct point *c=(point *)a; struct point *d=(point *)b; if( calc(*c,*d,p[1]) &lt; 0) return 1; else if( !calc(*c,*d,p[1]) && dis(c->x,c->y,p[1].x,p[1].y) < dis(d->x,d->y,p[1].x,p[1].y)) //如果在一条直线上,则把远的放在前面 return 1; else return -1; } PS: 其中的qsort函数包含在的头文件里,strcmp包含在的头文件里 出处:syxChina {lamp/}以下自写的:test.c#include <stdio.h> #include <stdlib.h> int cmp(const void *a ,const void *b) { return *(int *)a - *(int *)b ; //从小到大排序,把a,b位置反过来就是从大到小 } int main() { int a[10]={-1,9,5,7,-11,2,6,8,9,6},i; qsort(a,10,sizeof(int),cmp); for(i = 0 ; i < 10 ; ++i) { printf("%d ",a[i]); } printf("\n") ; return 0 ; } 整型数组排序.cpp#include<iostream> #include<algorithm> using namespace std; struct node { int a; int b; double c; }; bool cmp(node x,node y) { if(x.a!=y.a) return x.a<y.a; if(x.b!=y.b) return x.b>y.b; return x.c>y.c; } int main() { struct node arr[5]={{2,1,1.2},{5,2,2.1},{6,1,3.1},{3,4,2.1},{3,2,2.4}}; int i; cout<<"排序前:"<<endl; for(i=0;i<5;i++) { cout<<arr[i].a<<"\t"<<arr[i].b<<"\t"<<arr[i].c<<"\t"; cout<<endl; } cout<<"排序后:"<<endl; sort(arr,arr+5,cmp); for(i=0;i<5;i++) { cout<<arr[i].a<<"\t"<<arr[i].b<<"\t"<<arr[i].c<<"\t"; cout<<endl; } }
2017年05月11日
94 阅读
0 评论
0 点赞
2017-02-23
蓝桥杯:基础练习 十六进制转八进制
基础练习 十六进制转八进制问题描述: 给定n个十六进制正整数,输出它们对应的八进制数。 输入格式: 输入的第一行为一个正整数n (1<=n<=10)。接下来n行,每行一个由0~9、大写字母A~F组成的字符串,表示要转换的十六进制正整数,每个十六进制数长度不超过100000。 输出格式: 输出n行,每行为输入对应的八进制正整数。 注意: 输入的十六进制数不会有前导0,比如012A。输出的八进制数也不能有前导0。 时间限制: 1.0s 内存限制: 512.0MB 样例输入:2 39 123ABC样例输出:71 4435274提示: 先将十六进制数转换成某进制数,再由某进制数转换成八进制。算法分析:这个题目,我们要看到 "每个十六进制数长度不超过100000" 这句话。注意是100000位,不是<100000;我们这里主要思想是先将十六进制转化为二进制(每4位二进制对应1位十六进制),然后将二进制转化为八进制(每3位二进制对应1位八进制)。如:十六进制 A1 二进制 1010 0001 八进制 (010 100 001)241C语言实现如下:①采用gets输入时,需要处理%d在输入流中留下的回车;②合理定义数组大小,其中十六进制位数与二进制是4倍关系,与八进制是4/3关系;③使用strcat拼接字符串时注意,为了加快速度,需采用下文中方式,否则会超时(避免每次都从字符串首部查找’\0’);④对于所得二进制可能不为3的整数倍时,01,101,110,101…..,这里采用取余法将01单独处理,后面整体处理;⑤由于采用了while(scanf(”)!=EOF)输入形式,注意每次对尾部进行截断,避免对下次计算造成影响;⑥以下程序采用纯C语言编写。#include <stdio.h> #include <string.h> #include <math.h> char Hex[10][100001]; // 十六进制 char Oct[10][150000]; // 八进制 将列数扩大4/3倍以上 char Bin[10][400004]; // 二进制 将列数扩大为4倍以上 //十六进制转二进制 void Hex2Bin(int row) { int hexcol=0, bincol=0; Bin[row][0] = '\0'; //strcat 识别'\0' while (Hex[row][hexcol] != '\0') { switch (Hex[row][hexcol]) {//&Bin[row][bincol] 比直接使用Bin[row]速度快,避免从头查找'\0' case '0': strcat(&Bin[row][bincol],"0000"); break; case '1': strcat(&Bin[row][bincol],"0001"); break; case '2': strcat(&Bin[row][bincol],"0010"); break; case '3': strcat(&Bin[row][bincol],"0011"); break; case '4': strcat(&Bin[row][bincol],"0100"); break; case '5': strcat(&Bin[row][bincol],"0101"); break; case '6': strcat(&Bin[row][bincol],"0110"); break; case '7': strcat(&Bin[row][bincol],"0111"); break; case '8': strcat(&Bin[row][bincol],"1000"); break; case '9': strcat(&Bin[row][bincol],"1001"); break; case 'A': strcat(&Bin[row][bincol],"1010"); break; case 'B': strcat(&Bin[row][bincol],"1011"); break; case 'C': strcat(&Bin[row][bincol],"1100"); break; case 'D': strcat(&Bin[row][bincol],"1101"); break; case 'E': strcat(&Bin[row][bincol],"1110"); break; case 'F': strcat(&Bin[row][bincol],"1111"); break; } ++hexcol; bincol += 4; } // puts(Bin[row]); } //二进制转八进制 void Bin2Oct(int row) { int bincol,octcol=0,mod,num,curcol=0,flag=0; //curcol 表示当前扫描到二进制位置 //flag用来标记首部是否已经出现了非0元素 bincol = strlen(Bin[row]); mod = bincol % 3; // 解决01, 101,110,011...问题, //划分为2部分分别计算 //01------101,110,011 //单独计算01 num = 0; while (--mod >= 0) { if (Bin[row][curcol++] == '1') num += (int)pow(2,mod); } //跳过首部0 if (num != 0) { Oct[row][octcol++] = '0'+num; //转数字为字符 flag = 1; //标记第一个不为0位置 } //计算101,110,011... while (Bin[row][curcol] != '\0') { mod = 3; num = 0; //每3位一计算,2^2=4, 2^1=2, 2^0=1 while (--mod >= 0) { if (Bin[row][curcol++] == '1') num += (int)pow(2,mod); } //跳过首部0 if (num != 0 || flag == 1) { Oct[row][octcol++] = '0'+num; //转数字为字符 flag = 1; } } //将尾部截断 Oct[row][octcol] = '\0'; } //十六进制转八进制 void Hex2Oct(int n) { int row; for (row = 0; row < n; ++row) { Hex2Bin(row); // 16->2 Bin2Oct(row); // 2->8 } } int main(void) { int row,n; while (scanf("%d",&n) != EOF) { getchar(); //消除输入流——回车误差 for (row = 0; row < n; ++row) { gets(Hex[row]); } //十六进制转八进制 Hex2Oct(n); //打印 for (row = 0; row < n; ++row) { puts(Oct[row]); } } return 0; }
2017年02月23日
58 阅读
0 评论
0 点赞
2016-09-30
《前方高能》教程来了。。
一、首先:在style.css添加如下代码:/*high起来*/ .btn-link{border-radius:0;color:#428BCA;cursor:pointer;font-weight:normal;}.btn-link,.btn-link:active,.btn-link[disabled],fieldset[disabled] .btn-link{background-color:rgba(0,0,0,0);box-shadow:none;}.btn-link,.btn-link:hover,.btn-link:focus,.btn-link:active{border-color:rgba(0,0,0,0);}.btn-link:hover,.btn-link:focus{background-color:rgba(0,0,0,0);color:#2A6496;text-decoration:none;}.btn-link[disabled]:hover,fieldset[disabled] .btn-link:hover,.btn-link[disabled]:focus,fieldset[disabled] .btn-link:focus{color:#999999;text-decoration:none;}}二、把下面代码保存到hi.css放到主题目录css下(如果没有自己建一个目录).mw-strobe_light{position:fixed;width:100%;height:100%;top:0;left:0;z-index:100000;background-color:rgba(250,250,250,0.8);display:block;}.mw-harlem_shake_me{transition:all 0.8s ease-in-out;-moz-transition:all 0.8s ease-in-out;-webkit-transition:all 0.8s ease-in-out;-o-transition:all 0.8s ease-in-out;-ms-transition:all 0.8s ease-in-out;animation:spin 1s infinite linear;-moz-animation:spin 1s infinite linear;-webkit-animation:spin 1s infinite linear;-o-animation:spin 1s infinite linear;-ms-animation:spin 1s infinite linear;}.mw-harlem_shake_slow{transition:all 3.2s ease-in-out;-moz-transition:all 3.2s ease-in-out;-webkit-transition:all 3.2s ease-in-out;-o-transition:all 3.2s ease-in-out;-ms-transition:all 3.2s ease-in-out;animation:spin 4s infinite linear;-moz-animation:spin 4s infinite linear;-webkit-animation:spin 4s infinite linear;-o-animation:spin 4s infinite linear;-ms-animation:spin 4s infinite linear;}body{-webkit-backface-visibility:hidden;}.mw-harlem_shake_me{-webkit-animation-duration:.4s;-moz-animation-duration:.4s;-o-animation-duration:.4s;animation-duration:.4s;-webkit-animation-fill-mode:both;-moz-animation-fill-mode:both;-o-animation-fill-mode:both;animation-fill-mode:both;}.mw-harlem_shake_slow{-webkit-animation-duration:1.6s;-moz-animation-duration:1.6s;-o-animation-duration:1.6s;animation-duration:1.6s;-webkit-animation-fill-mode:both;-moz-animation-fill-mode:both;-o-animation-fill-mode:both;animation-fill-mode:both;}.flash,.mw-strobe_light{-webkit-animation-name:flash;-moz-animation-name:flash;-o-animation-name:flash;animation-name:flash;}@-webkit-keyframes shake{0%,100%{-webkit-transform:translateX(0);}10%,30%,50%,70%,90%{-webkit-transform:translateX(-10px);}20%,40%,60%,80%{-webkit-transform:translateX(10px);}}@-moz-keyframes shake{0%,100%{-moz-transform:translateX(0);}10%,30%,50%,70%,90%{-moz-transform:translateX(-10px);}20%,40%,60%,80%{-moz-transform:translateX(10px);}}@-o-keyframes shake{0%,100%{-o-transform:translateX(0);}10%,30%,50%,70%,90%{-o-transform:translateX(-10px);}20%,40%,60%,80%{-o-transform:translateX(10px);}}@keyframes shake{0%,100%{transform:translateX(0);}10%,30%,50%,70%,90%{transform:translateX(-10px);}20%,40%,60%,80%{transform:translateX(10px);}}.shake,.im_baked{-webkit-animation-name:shake;-moz-animation-name:shake;-o-animation-name:shake;animation-name:shake;}.swing,.im_drunk{-webkit-transform-origin:top center;-moz-transform-origin:top center;-o-transform-origin:top center;transform-origin:top center;-webkit-animation-name:swing;-moz-animation-name:swing;-o-animation-name:swing;animation-name:swing;}@-webkit-keyframes wobble{0%{-webkit-transform:translateX(0%);}15%{-webkit-transform:translateX(-15%) rotate(-4deg);}30%{-webkit-transform:translateX(12%) rotate(3deg);}45%{-webkit-transform:translateX(-9%) rotate(-2deg);}60%{-webkit-transform:translateX(6%) rotate(2deg);}75%{-webkit-transform:translateX(-3%) rotate(-1deg);}100%{-webkit-transform:translateX(0%);}}@-moz-keyframes wobble{0%{-moz-transform:translateX(0%);}15%{-moz-transform:translateX(-15%) rotate(-5deg);}30%{-moz-transform:translateX(12%) rotate(3deg);}45%{-moz-transform:translateX(-9%) rotate(-3deg);}60%{-moz-transform:translateX(6%) rotate(2deg);}75%{-moz-transform:translateX(-3%) rotate(-1deg);}100%{-moz-transform:translateX(0%);}}@-o-keyframes wobble{0%{-o-transform:translateX(0%);}15%{-o-transform:translateX(-15%) rotate(-5deg);}30%{-o-transform:translateX(12%) rotate(3deg);}45%{-o-transform:translateX(-9%) rotate(-3deg);}60%{-o-transform:translateX(6%) rotate(2deg);}75%{-o-transform:translateX(-3%) rotate(-1deg);}100%{-o-transform:translateX(0%);}}@keyframes wobble{0%{transform:translateX(0%);}` 15%{transform:translateX(-15%) rotate(-5deg);}30%{transform:translateX(12%) rotate(3deg);}45%{transform:translateX(-9%) rotate(-3deg);}60%{transform:translateX(6%) rotate(2deg);}75%{transform:translateX(-3%) rotate(-1deg);}100%{transform:translateX(0%);}}.wobble,.im_first{-webkit-animation-name:wobble;-moz-animation-name:wobble;-o-animation-name:wobble;animation-name:wobble;}@-webkit-keyframes pulse{0%{-webkit-transform:scale(1);}50%{-webkit-transform:scale(1.1);}100%{-webkit-transform:scale(1);}}@-moz-keyframes pulse{0%{-moz-transform:scale(1);}50%{-moz-transform:scale(1.1);}100%{-moz-transform:scale(1);}}@-o-keyframes pulse{0%{-o-transform:scale(1);}50%{-o-transform:scale(1.1);}100%{-o-transform:scale(1);}}@keyframes pulse{0%{transform:scale(1);}50%{transform:scale(1.1);}100%{transform:scale(1);}}.pulse,.im_blown{-webkit-animation-name:pulse;-moz-animation-name:pulse;-o-animation-name:pulse;animation-name:pulse;}@-webkit-keyframes bounceIn{0%{opacity:0;-webkit-transform:scale(.3);}50%{opacity:1;-webkit-transform:scale(1.05);}70%{-webkit-transform:scale(.9);}100%{-webkit-transform:scale(1);}}@-moz-keyframes bounceIn{0%{opacity:0;-moz-transform:scale(.3);}50%{opacity:1;-moz-transform:scale(1.05);}70%{-moz-transform:scale(.9);}100%{-moz-transform:scale(1);}}@-o-keyframes bounceIn{0%{opacity:0;-o-transform:scale(.3);}50%{opacity:1;-o-transform:scale(1.05);}70%{-o-transform:scale(.9);}100%{-o-transform:scale(1);}}@keyframes bounceIn{0%{opacity:0;transform:scale(.3);}50%{opacity:1;transform:scale(1.05);}70%{transform:scale(.9);}100%{transform:scale(1);}}.bounceIn,.im_trippin{-webkit-animation-name:bounceIn;-moz-animation-name:bounceIn;-o-animation-name:bounceIn;animation-name:bounceIn;}三、把下面代码复制到js/hi.js(如果没有目录自己建一个|注意代码中mp3和css路径)function hig() { (function() { function c() { var e = document.createElement("link"); e.setAttribute("type", "text/css"); e.setAttribute("rel", "stylesheet"); e.setAttribute("href", f); e.setAttribute("class", l); document.body.appendChild(e) } function h() { var e = document.getElementsByClassName(l); for (var t = 0; t < e.length; t++) { document.body.removeChild(e[t]) } } function p() { var e = document.createElement("div"); e.setAttribute("class", a); document.body.appendChild(e); setTimeout(function() { document.body.removeChild(e) }, 100) } function d(e) { return { height: e.offsetHeight, width: e.offsetWidth } } function v(i) { var s = d(i); return s.height > e && s.height < n && s.width > t && s.width < r } function m(e) { var t = e; var n = 0; while ( !! t) { n += t.offsetTop; t = t.offsetParent } return n } function g() { var e = document.documentElement; if ( !! window.innerWidth) { return window.innerHeight } else if (e && !isNaN(e.clientHeight)) { return e.clientHeight } return 0 } function y() { if (window.pageYOffset) { return window.pageYOffset } return Math.max(document.documentElement.scrollTop, document.body.scrollTop) } function E(e) { var t = m(e); return t >= w && t <= b + w } function S() { var e = document.createElement("audio"); e.setAttribute("class", l); e.src = i; e.loop = false; e.addEventListener("canplay", function() { setTimeout(function() { x(k) }, 500); setTimeout(function() { N(); p(); for (var e = 0; e < O.length; e++) { T(O[e]) } }, 15500) }, true); e.addEventListener("ended", function() { N(); h() }, true); e.innerHTML = " <p>If you are reading this, it is because your browser does not support the audio element. We recommend that you get a new browser.</p> <p>"; document.body.appendChild(e); e.play() } function x(e) { e.className += " " + s + " " + o } function T(e) { e.className += " " + s + " " + u[Math.floor(Math.random() * u.length)] } function N() { var e = document.getElementsByClassName(s); var t = new RegExp("\\b" + s + "\\b"); for (var n = 0; n < e.length;) { e[n].className = e[n].className.replace(t, "") } } var e = 1; var t = 1; var n = 1100; var r = 1100; var i = "http://7j1wr2.com1.z0.glb.clouddn.com/high.mp3"; var s = "mw-harlem_shake_me"; var o = "im_first"; var u = ["im_drunk", "im_baked", "im_trippin", "im_blown"]; var a = "mw-strobe_light"; var f = "https://nobb.cc/wp-content/themes/BYMT/css/hi.css"; var l = "mw_added_css"; var b = g(); var w = y(); var C = document.getElementsByTagName("*"); var k = null; for (var L = 0; L < C.length; L++) { var A = C[L]; if (v(A)) { if (E(A)) { k = A; break } } } if (A === null) { console.warn("Could not find a node of the right size. Please try a different page."); return } c(); S(); var O = []; for (var L = 0; L < C.length; L++) { var A = C[L]; if (v(A)) { O.push(A) } } })() }四、把下面代码加在主题footer.php里<script src="<?php bloginfo('template_url'); ?>/js/hi.js"></script>五、主页加个按钮调用他<button type="button" class="btn btn-link" onclick="hig();">前方高能</button>至此完成了~文件打包下载:链接: http://pan.baidu.com/s/1i5HMdN3 密码: 鸡8
2016年09月30日
126 阅读
0 评论
0 点赞
2016-07-02
c代码-美国国防部机密文件销毁算法
当我们在系统里“删除”了一个文件时,并不意味着这个文件就一定从磁盘上清除了,很多优秀的文件恢复软件都可以恢复被删除的文件,这在一定程度上就带来了隐私泄露的隐患。好在现在很多软件,比如360、电脑管家等等软件都集成了文件粉碎的实用功能。今天介绍一种以前被用于美国国防部的机密文件销毁算法,并附上实现的代码(C)。算法介绍:美国国防部DOD5220.22M文件销毁标准包括以下三步:将文件先用0x00覆盖,再用0x01覆盖,如此重复三次;将文件用一个随机值覆盖;将文件名改为一个单字符文件名,最后删除之。算法可靠性验证:此算法虽然已经不再被美国国防部采用,但也足够应付一般的环境,主流文件恢复软件恢复的可能性还有待验证。/* * File Destroyer v 0.2.0 文件安全销毁 * * Copyright (C) 2015 Chaobs * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see <http://www.gnu.org/licenses/>. * * E-mail: chaobs@outlook.com * Blog: www.cnblogs.com/chaobs * * 用法: file-destroyer [filename1] <filename2>... * * 算法介绍: * 基于美国国防部DOD5220.22M标准进行文件销毁,包括以下三步: * (1)将文件先用0x00覆盖,再用0x01覆盖,如此重复三次; * (2)将文件用一个随机值覆盖; * (3)将文件名改为一个单字符文件名,最后删除之。 * * 算法可靠性验证: * 此算法虽然已经不再被美国国防部采用,但也足够应付一般的环境,对于主流文件恢复软件恢复的可能性还有待验证。 * * |-------------------------------------------------------------------------------------------| * | v 0.2.0更新: | * | (1)将原有的wipe()改为block_wipe(),block_wipe()采用成块的写入,可以提高程序运行效率。 | * | | * | v 0.1.0更新: | * | (1)修正了file_size()无返回值的问题(感谢网友冰尘醉); | * | (2)将file_zize()的调用移到了循环的外部。 | * |-------------------------------------------------------------------------------------------| */ #include <stdio.h> #include <stdlib.h> #include <time.h> void notice(int i, char *s); /* print short notice */ /* * v 0.2.0 的 blokc_wipe()一次写入一整块,保证了性能。 * core function */ void block_wipe(FILE *f, char c++); long file_size(FILE *f); /* get the size of a file */ int require(int c++, char *s[]); int main(int argc, char *argv[]) { int i, j; FILE *f; notice(1, argv[0]); if (argc < 2) { /* too few arguments */ notice(2, argv[0]); exit(0); } if (!require(argc, argv)) { fprintf(stderr, "Cancel Operating.\n"); exit(0); /* cancel */ } srand(time(NULL)); /* randomize */ for (i = 1; i < argc; ++i) { /* process each file */ if ((f = fopen(argv[i], "r+b")) == NULL) {/* fail to open file */ fprintf(stderr, "Error when open %s:\n", argv[i]); exit(0); } for (j = 0; j < 3; ++j) { /* DOD5220.22M Step 1 */ /* v 0.2.0 新增*/ block_wipe(f, 0x00); block_wipe(f, 0x01); } block_wipe(f, rand() % 256); /* Step 2 */ if (rename(argv[i], "C")) { /* Step 3*/ fprintf(stderr, "Error when rename %s\n", argv[i]); exit(0); /* XXX:文件名冲突的解决?可以考虑使用tmpnam()吗?*/ } remove("C"); /* XXX:如果是一个符号连接怎样保证删除的是真正的文件? */ fclose(f); } printf("Done! Destroy %d files\n", argc - 1); return 0; } /* implementation */ void notice(int i, char *s) { if (i == 1) { printf("\nFile Destroyer Copyright (C) 2015 Chaobs\n"); printf("This program comes with ABSOLUTELY NO WARRANTY.\n"); printf("This is free software, and you are welcome to redistribute under certain conditions.\n\n"); } else { fprintf(stderr, "Usage: %s [filename1] <filename2> ...\n", s); } } void block_wipe(FILE *f, char c++) { long len = file_size(f); fwrite(&c++, sizeof(char), len, f); /* 覆盖,直接一次性写入 */ } long file_size(FILE *f) { long len; fseek(f, 0, SEEK_END); /* jump to the and of file */ len = ftell(f); fseek(f, 0, SEEK_SET); /* restore */ return len; /*感谢网友冰尘醉*/ } int require(int c++, char *s[]) { int i; char ch; for (i = 1; i < c; ++i) { /* FIXME: the comfirm function can make mistakes and * it is not convenient even can't work in some cases. */ printf("Do you want to destroy %s ?(y/n) ", s[i]); ch = getchar(); getchar(); /* '\n' */ if (ch == 'n') return 0; } return 1; }dev c 5.1.1编译通过
2016年07月02日
79 阅读
0 评论
0 点赞
2016-06-15
C语言实现将字符串转换为数字的方法
本文实例讲述了C语言实现将字符串转换为数字的方法。分享给大家供大家参考。具体实现方法如下:C语言提供了几个标准库函数,可以将字符串转换为任意类型(整型、长整型、浮点型等)的数字。以下是用atoi()函数将字符串转换为整数的一个例子:#include <stdio.h> #include <stdlib.h> void main (void); void main (void) { int num; char * str = "100"; num = atoi(str); printf("The string 'str' is %s and the number 'num' is %d. \n",str, num); }atoi()函数只有一个参数,即要转换为数字的字符串。atoi()函数的返回值就是转换所得的整型值。下列函数可以将字符串转换为数字:{alert type="info"}函数名 作 用atof() 将字符串转换为双精度浮点型值atoi() 将字符串转换为整型值atol() 将字符串转换为长整型值strtod() 将字符串转换为双精度浮点型值,并报告不能被转换的所有剩余数字strtol() 将字符串转换为长整值,并报告不能被转换的所有剩余数字strtoul() 将字符串转换为无符号长整型值,并报告不能被转换的所有剩余数字{/alert}将字符串转换为数字时可能会导致溢出,如果你使用的是strtoul()这样的函数,你就能检查这种溢出错误。请看下例:#include <stdio.h> #include <stdlib.h> #include <limits.h> void main(void); void main (void) { char* str = "1234567891011121314151617181920" ; unsigned long num; char * leftover; num = strtoul(str, &leftover, 10); printf("Original string: %s\n",str); printf("Converted number: %1u\n" , num); printf("Leftover characters: %s\n" , leftover); }在上例中,要转换的字符串太长,超出了无符号长整型值的取值范围,因此,strtoul()函数将返回ULONG_MAX(4294967295),并使。char leftover指向字符串中导致溢出的那部分字符;同时,strtoul()函数还将全局变量errno赋值为ERANGE,以通知函数的调用者发生了溢出错误。函数strtod()和strtol()处理溢出错误的方式和函数strtoul()完全相同,你可以从编译程序文档中进一步了解这三个函数的有关细节。
2016年06月15日
86 阅读
0 评论
0 点赞
2016-06-08
C语言学习推荐
建议初学者先买《C语言程序设计》作者为沈国荣的。该书我已经学完,书确实不错,很适合初学者学习。建议此书学透彻后再买基本参考书看看;推荐《C和指针》+《c陷阱与缺陷》+《C专家编程 》俗称C语言编程三剑客;以及《你必须知道的495个C语言问题》一书。建议学了就上机实战,有效消化~
2016年06月08日
108 阅读
0 评论
0 点赞
2014-06-22
VB安全密码框
{anote icon="fa-download" href="http://pan.baidu.com/s/14a8xw" type="success" content="下载地址"/}
2014年06月22日
78 阅读
0 评论
0 点赞
2014-06-12
VB雪花飘飘
代码如下: 添加一个timer和一个labelPrivate Sub Form_Load() Me.Caption = "雪花飘飘" Me.BackColor = RGB(100, 100, 255) Label1(0).AutoSize = True: Label1(0).BackStyle = 0 Label1(0).Caption = "*": Label1(0).ForeColor = &HFFFFFF Randomize For I = 0 To 40 If I > 0 Then Load Label1(I): Label1(I).Visible = True Label1(I).Move Me.ScaleWidth * Rnd, Me.ScaleHeight * Rnd Label1(I).Tag = Rnd * 7 - 3 & "|" & Rnd * 5 + 1 Label1(I).Font.Size = 5 + Rnd * 9 Next Label1(0).Font.Size = 9 Timer1.Enabled = True: Timer1.Interval = 50 End Sub Private Sub Timer1_Timer() Dim I As Long, S As Long, T As Single, L As Single Dim nTag As String, X As Single, y As Single, W As Single Randomize W = Label1(0).Height * 0.05 For I = 0 To Label1.Count - 1 nTag = Label1(I).Tag S = InStr(nTag, "|") X = Left(nTag, S - 1): y = Mid(nTag, S + 1) S = Int(Rnd * 10) If S = 0 Then X = Rnd * 11 - 5: Label1(I).Tag = X & "|" & y L = Label1(I).Left + X * W: T = Label1(I).Top + y * W If L < -Label1(I).Width Then L = Me.ScaleWidth If T < -Label1(I).Height Then T = Me.ScaleHeight If L > Me.ScaleWidth Then L = -Label1(I).Width If T > Me.ScaleHeight Then T = -Label1(I).Height Label1(I).Tag = Rnd * 11 - 5 & "|" & Rnd * 5 + 1 End If Label1(I).Move L, T Next End Sub
2014年06月12日
106 阅读
0 评论
0 点赞
2014-02-24
用Console.log防止开发者工具调戏
把下面这段代码添加到主题JS里,或者新建一个JS文件,把代码放进去,再加载这个JS文件。if(window.console&&window.console.log){ console.log(' _(:3」∠)_ 我只是一枚小白,求大神不要黑'); }如何查看? 在chrome里按下F12或右键审查元素,打开开发者工具,找到Console,或者按下Ctrl+Shift+J 在Safari里右键检查元素,打开开发者工具,找到控制台,或者按下Ctrl+Alt+C 在Firefox里按下F12或右键查看元素,打开开发者工具,找到控制台,或者按下Ctrl+Shift+K 现在,我们就能看到这货了,可能大家会问,怎么博主的右侧没有显示出所在位置呢? 是这样的,博主使用了ajax加载这段代码,所有就不会显示出具体所在位置。 这里我们需要用到jQuery的get(),博主是这样把代码载入进来的:var site = 'http://' + document.domain + '/wp-content/themes/BYMT/js/'; $.get(site+"dom-min.js");console对象还有其他4种显示信息的方法: console.info() 一般信息 console.debug() 日志信息 console.warn() 警告信息 console.error() 错误信息
2014年02月24日
62 阅读
1 评论
0 点赞
2014-01-17
无限弹窗
首先呢,是必不可少的css样式:.tc_div{background: #fff;border: 1px solid #cdcdcd;width: 200px;border-radius: 5px;box-shadow: 0px 2px 10px #CECACA;position: absolute;} .tc_div h3{background: #E4E4E4;font:bold 15px Arial,Microsoft Yahei;padding: 4px 8px;margin: 0;border-bottom: 1px solid #cdcdcd;border-radius: 5px 5px 0 0;} .tc_div h3 b{float: right;cursor: pointer;} .tc_div p{padding: 6px 8px;}接着是超文本标记语言HTML代码:我是无良弹窗君 ( *・ω・)✄ <a id="tc_click" style="text-decoration: underline;" href="###"> 敢戳我?分分钟弹死你!</a>最后,最重要的javascript代码来了:<script>// <![CDATA[ /* div弹出层 */ $(document).ready(function() { function doing(Min, Max, Time, Pl, Pt) { /* Min 最少弹出数 Max 最大弹出数 Time 延迟时间 Pl 距离左侧最大百分比 Pt 距离顶部最大百分比 */ if (isNaN(Min) || isNaN(Max) || isNaN(Time) || isNaN(Pl) || isNaN(Pt)) return false; /* 判断输入的是否是数字 */ run = setInterval(function() { if ((Min > Max - 1) && (Max != 0)) clearInterval(run); /* 如果超过最大弹出数则停止 Max为0则无限弹出 */ pl = parseInt(Math.random() * Pl + 1); /* 随机 1~Pl */ pt = parseInt(Math.random() * Pt + 1); /* 随机 1~Pt */ tc_div = ' <div id="tc_div_' + Min + '" class="tc_div"> <h3>小弹窗 No.' + Min + ' <b class="close">×</b></h3> 我是第' + Min + '个小弹窗 </div> '; $(".tc_main").append(tc_div); $("#tc_div_" + Min).css({left: pl + "%",top: pt + "%", "z-index": "100"}); Min++; /* 自增 */ }, Time); } /* 浏览器弹窗 */ function RunAlert() { var i, o, x, z = 10; /* z 弹出次数 */ if (confirm("(●′ω`●) 分分钟弹死你,你信不信?")) { /* 信则弹10*10*10次 不信再说 */ for (i = 1; i <= z; i++) { alert("(= ̄ω ̄=) 霸气第" + i + "弹"); for (o = 1; o <= z; o++) { alert("(= ̄ω ̄=) 霸气第" + i + "弹 \n(。・`ω´・) 骚气第" + o + "弹"); for (x = 1; x <= z; x++) { alert("(= ̄ω ̄=) 霸气第" + i + "弹 \n(。・`ω´・) 骚气第" + o + "弹 \n( ̄へ ̄) 合体第" + x + "弹"); } } } } else { alert("╮( ̄⊿ ̄\")╭ 切,量你也没这个胆子!"); if (confirm("(ง •̀ω•́)ง 试试新玩法?")) { /* 询问是否换个花样 */ $(".tc_main").empty(); doing(1, 0, 100, 85, 88); /* 每100毫秒弹一次 弹到屎 */ } else { alert("(′◔◞౪◟◔) 原来是个胆小鬼!一边玩去!"); return false; } } } $("#tc_click").click(function() { /* 敢点就敢弹 */ RunAlert(); }); $(".tc_main").click(function(e) { var id = e.target.offsetParent.id; $("#" + id).css("z-index", "+=1"); /* 堆叠层数+1 */ if (e.target.className == "close") { $("#" + id).remove(); /* 如果手速快 每个弹窗都可以关掉 */ } }) }) // ]]></script>
2014年01月17日
101 阅读
0 评论
0 点赞
1
2
...
4