strlen

为Linux 操作系统建立兼容的 Windows命令接口

匆匆过客 提交于 2020-01-18 00:46:07
简单实现的dos命令 CLS, DATE,TIME,FIND,FINDSTR,COMP,FC,EXIT,HELP,MORE 说明 由于自己能力和时间有限,程序依旧存在不少bug,并且不是原模原样的实现dos命令,有的简单实现,有的命令参数众多,只实现了几个 这个程序写的并不优雅,违反了很多大忌,只是简单能跑 写完后我再也不想见到“段错误”这三个字,心酸,这个可能在出现段错误时为你提供点解决思路 https://www.cnblogs.com/zl-graduate/p/5735288.html 使用的环境 gcc 9.2.1 20190909 GNU gdb (Debian 8.3-1) 8.3 Kali-Linux-2018.2-vm-amd64 参考的Linux api文档 Linux c api 参考手册 https://legacy.gitbook.com/book/wizardforcel/linux-c-api-ref/details https://github.com/guodongxiaren/LinuxAPI/wiki 结构 为了演示,所用到的两个文档1.txt 2.txt CLS 功能 cls命令的功能是清屏 设计流程 其实就是简单地 fputs("\x1b[2J\x1b[H", stdout);其中的不明所以的字符串是VT100的控制码,部分定义如下 "

linux c 判断字符串是否是数字

梦想的初衷 提交于 2020-01-17 00:15:09
方法一 /** * @brief Function isdigitstr() 判断传入字符串是否全数字 * @param[in] char *str 字符串 * @retval 1: 全字符串,0:非全字符串 * @pre * @post */ static int isdigitstr(char *str) { return (strspn(str, "0123456789")==strlen(str)); } 解释: 可以用strspn与strlen组合的方式判断一个字符串是否全数字。strspn返回的是str中有多少字符与参数"0123456789"中相同,而全数字时正好与strlen相同, 所以此组合可以判断一个字符串是否为全数字的。 strspn函数定义: // 头文件 #include <string.h> size_t strspn (const char *s,const char * accept); 函数说明 strspn()从参数s 字符串的开头计算连续的字符,而这些字符都完全是accept 所指字符串中的字符。 简单的说,若strspn()返回的数值为n,则代表字符串s 开头连续有n 个字符都是属于字符串accept内的字符。 返回值 返回字符串s开头连续包含字符串accept内的字符数目 方法二 #include <ctype.h> #include

A weird difference between strlen() and sizeof()

夙愿已清 提交于 2020-01-14 07:00:08
问题 I tried to test the difference of sizeof and strlen but I found something strange today. The code is as follow. #include <iostream> #include <string.h> using namespace std; int main() { char a[]={"I am a boy"}; char b[]={'I',' ','a','m',' ','a',' ','b','o','y'}; cout << "sizeof(a) = " << sizeof(a) << endl << "sizeof(b) = " << sizeof(b) <<endl; cout << "strlen(a) = "<< strlen(a) << endl << "strlen(b) = " << strlen(b) << endl; return 0; } The result is as follow: sizeof(a) = 11 sizeof(b) = 10

printing out 1 random letter of a word php functions [duplicate]

[亡魂溺海] 提交于 2020-01-14 06:29:10
问题 This question already has answers here : a method of selecting random characters from given string (15 answers) Closed 5 years ago . i want to Use strlen(), substr(), and rand() to print a random character from my name to the screen. <html> <p> <?php // Use strlen(), substr(), and rand() to // print a random character from my name to the screen. $name = "jordi"; $length = strlen("$name"); $length = rand(); $partial = substr($lengt, 0,5); print $name. "<br />"; print $length. "<br />"; print

C++STL库String类实现

巧了我就是萌 提交于 2020-01-13 14:50:11
前言:按照源码中String类的设计方式实现简单的写了一个myString,参考 C++官网中的标准stringAPI 完成几乎所有的String类的方法,尽量与源码实现风格类似,有部分没实现有的功能之间相似度较高,重复工作意义不大就没写,有的是没办法写。 亲自在我写的数据结构课设哈弗曼树中使用,没有出现特殊问题,自己测试也没有出问题,如果哪里有错希望大家可以给我指出来。 (一) 关于扩容 在开始写的时候我先查阅相关资料和源码,对与String的扩容,我发现在源码中String的实现里,它预先会有一个16字节的在栈区的缓冲区,如果你的String对象不到16字节,则不会申请堆区内存使用这部分栈区内存,在所占内存较小的情况下,直接使用栈区内存的会增强运行效率,提高CPU cache命中率,而当你使用的string类占据内存过大时,据我查我的系统(Deepin 15.10.1),默认栈内存只开辟8192KB。 如果String类对象所占内存过大,很有可能程序直接爆栈,所以,在字符串内存高于16字节时,会开辟堆区内存,在源码中,为了节省空间,在这里使用了一个联合体,下面是该联合体结构。 我自己模拟的结构 enum { BUF_LEN = 16 } ; union _Bxty { char _Buf [ BUF_LEN ] ; char * _ptr ; } _Bx ; 在扩容的时候

parallel strlen?

a 夏天 提交于 2020-01-13 10:19:08
问题 I'm wondering if there would be any merit in trying to code a strlen function to find the \0 sequence in parallel. If so, what should such a function take into account? Thanks. 回答1: You'd have to make sure the NUL found by a thread is the first NUL in the string, which means that the threads would need to synchronize on what their lowest NUL location is. So while it could be done, the overhead for the sync would be far more expensive than any potential gain from parallelization. Also, there's

高精度害死人

£可爱£侵袭症+ 提交于 2020-01-11 16:23:08
高精度加减乘除板子,整理一下成为函数。 思路 都是字符串读入,倒序存储。数组 \(a_0\) 表示 \(a\) 的位数。 加法 每一位相加,判断是否需要进位。循环结束后判断最高位是否需要进位,最终调整一下位数。 减法 每一位相减,不够减的向前一位借位 (感觉我在学习小学一年级知识??) 最后需要调整位数,去掉前导0. 乘法 这里和普通的竖式乘法不同。高精乘高精思路为,答案的第i+j-1位,等于两乘数分别的第 i 位和第 j 位相乘。最后需要处理进位和位数的问题。 除法 如上图,是地球人用纸和笔做的除法。但是很显然,计算机走试商的方法太麻烦,那就只能把除数移到被除数的最高位(空余的用0补上),再相减,直到剩下的数小于除数(同时记录商),然后进行下一位的计算。 代码 加法 #include<iostream> #include"cmath" #include<cstdio> #include<algorithm> using namespace std; string in; int a[999],b[999],ans[999]; int strlen(string x){ int tot = 0; while(x[tot++] != '\0'); return tot-1; } void _P(int x[],int y[]){ ans[0] = max(x[0],y[0]);

PHP 小知识

白昼怎懂夜的黑 提交于 2020-01-11 07:38:16
PHP 加密解密 <?php//加密 function encrypt($data, $key) { $key = md5($key); $x = 0; $len = strlen($data); $l = strlen($key); $char = ''; for ($i = 0; $i < $len; $i++) { if ($x == $l) { $x = 0; } $char .= $key{$x}; $x++; } $str = ''; for ($i = 0; $i < $len; $i++) { $str .= chr(ord($data{$i}) + (ord($char{$i})) % 256); } return base64_encode($str); } //解密 function decrypt($data, $key) { $key = md5($key); $x = 0; $data = base64_decode($data); $len = strlen($data); $l = strlen($key); $char = ''; for ($i = 0; $i < $len; $i++) { if ($x == $l) { $x = 0; } $char .= substr($key, $x, 1); $x++; } $str = ''; for

strlen的另一种实现,可以作为ShellCode

廉价感情. 提交于 2020-01-11 00:35:45
在实际工作中会遇到很多strlen. 这里针对strlen函数做一下代码还原. 并且讲解其原理 高级代码如下: #include <iostream> int main() { char szBuffer[] = "HelloWorld"; scanf_s("%s", szBuffer); long StrSize = strlen(szBuffer); scanf_s("%d", &StrSize); return 0; } 请不要关注scanf_s 为了编译器能够正确编译加上自己懒得去掉SDL检查.所以加了.这里的scanf_s 只是为了防止编译器直接全部优化掉. 对应汇编代码如下: .text:00401050 ; int __cdecl main(int argc, const char **argv, const char **envp) .text:00401050 main proc near ; CODE XREF: __scrt_common_main_seh+F5↓p .text:00401050 .text:00401050 var_14 = dword ptr -14h .text:00401050 var_10 = qword ptr -10h .text:00401050 var_8 = word ptr -8 .text:00401050 var_6