在linux里面,我们经常会遇到i386 i686 i486 I586 这些代码,例如查看内核版本: [root@localhost logs]# uname -a Linux localhost.localdomain...2.6.18-164.el5PAE #1 SMP Thu Sep 3 04:10:44 EDT 2009 i686 i686 i386 GNU/Linux You have new mail in /....tar.gz ZendOptimizer-3.3.3-linux-glibc23-x86_64.tar.gz 那么linux 中的 i386 i686 i486 i586 究竟是什么含义呢?...其实很简单,i代表intel(英特尔)系列的cpu 386 几乎适用于所有的 x86 平台,不论是旧的 pentum 或者是新的 pentum-IV 与 K7 系列的 CPU等等,都可以正常的工作!...那个 i 指的是 Intel 兼容的 CPU 的意思,至于 386 不用说,就是 CPU 的等级啦! i586 就是 586 等级的计算机,那是哪些呢?
那个 i 指的是 Intel 兼容的 CPU 的意思,至于 386 不用说,就是 CPU 的等级啦! i586 就是 586 等级的计算机,那是哪些呢?...包括 pentum 第一代 MMX CPU, AMD 的 K5, K6 系列 CPU ( socket 7 插脚 ) 等等的 CPU 都算是这个等级; i686 在 pentun II 以后的 Intel
SMP Tue Dec 3 01:25:33 UTC 2013 i686 i686 i686 GNU/Linux 这是什么i686?...最佳解决办法 i686意味着您正在使用32 bit OS。...i686广泛用于描述32位P6处理器架构,该架构与Pentium Pro /II兼容并具有指令集。例如,AMD K7(Duron™和Athlon™)是i686。...所有x86 CPU都与原始的Intel 80386(缩写为i386)兼容,因此如果你想要一个与所有x86 CPU兼容的内核,你就可以编译一个i386内核。...i686首次出现在1997年,现代处理器具有许多i686上没有的功能(SSE,额外寄存器等),但是应用程序需要编译时支持这些功能,这可能会破坏与旧系统的兼容性。
其他分类函数跟这个一样,满足对应条件返回非0整数,不满足条件,返回0,记住非0的整数不一定是1!!! 2....= "abcdef"; const char* str2 = "bbb"; if(strlen(str2)-strlen(str1)>0) { printf("str2>str1\n"); } else...‘\0’呀 8. strstr的使用和模拟实现 char * strstr ( const char * str1, const char * str2); 这个就是在str1中找到str2的字符串...errno来记录程序的当前错误码,只不过程序启动的时候errno是0,表示没有错误,当我们在使用标准库中的函数的时候发生了某种错误,就会将对应的错误码,存放在errno中,而一个错误码的数字是整数很难理解是什么意思...= 0; for (i = 0; i i++) { printf("%s\n", strerror(i)); } return 0; } 结果 也可以了解一下perror函数
如果检测到 条件1 的退出状态为 0,就不会再检测 条件2 了,因为不管 条件2 的退出状态是什么,整个表达式必然都是不成立的,检测了也是多此一举。...如果检测到 条件1 的退出状态为 1,就不会再检测 条件2 了,因为不管 条件2 的退出状态是什么,整个表达式必然都是成立的,检测了也是多此一举。 ! !条件 逻辑非运算符,相当于“取反”的效果。.../bin/bash str1="itheima" str2="itcast" str3="" echo "str1=${str1},str2=${str2},str3=${str3}" if test...$str1 = $str2 then echo 'str1和str2两个字符串相等' else echo 'str1和str2两个字符串不相等' fi if test $str1 \...> $str2 then echo 'str1大于str2' else echo 'str1小于str2' fi if test -z $str2 then echo "str2
= "abcdef"; const char* str2 = "bbb"; if (strlen(str2) - (strlen(str1) > 0)) { printf("str2>str1...递归的终止条件是当当前字符是空字符 ('\0') 时返回 0,否则返回 1 加上递归调用 my_strlen(str+1)的结果。这种递归方法会逐层深入字符串,并在回溯时计算字符串的长度。...那还怎么停止,这样就导致了死循环 6. strcmp 的使⽤和模拟实现 int strcmp ( const char * str1, const char * str2 ); 两个字符串的内容不能直接进行比较...我们通过解引用让他们进行比较如果相等地址++一直循环下去如果遇到'\0'了还一直相等就放回0,如果不相等了就跳出循环,直接返回现在所指的字符之差的数。...errno来记录程序的当前错误码,只不过程序启动 的时候errno是0,表⽰没有错误,当我们在使⽤标准库中的函数的时候发⽣了某种错误,就会将对应 的错误码,存放在errno中,⽽⼀个错误码的数字是整数很难理解是什么意思
= str2 str1 = str2 str1 !...= str2 str1 ≠ str2 str1 str2 str1 str2 str1 > str2 str1 > str2 -z str1 str1 长度非0 -n str1 str1 长度为...命令 elif 条件3;then 命令 else 命令 fi While 语句 // while 从某种意义上来讲,可以说是 if-then 语句和 for 循环的混杂体 //...while 语句中,只有当测试条件为 true 时,才会不断循环下去,直至遇到 false while 测试条件 do 命令 done For 语句 // for 语句是按行逐一遍历数据,以回车换行为分割...n 关键字匹配(涉及正则表达式) // 匹配关键字信息,str1 字符串包含 str2 内容 [[ str1 =~ str2 ]] 字符串替换 // 字符串替换,如果末尾加 /g 表示全部替换 var1
str1,最后用于返回 (3)strcpy函数的原理就是把源字符串的字符一个一个拷贝给目标字符串,所以我们可以使用while循环,对str2解引用,然后赋值给*str1,把这个赋值表达式作为循环判断条件...++; } (4)我们可以优化一下上面的代码,既然str1和str2都要++的,我们可以直接写到循环条件里去,如下: while (*str1++ = *str2++) { ; } 这样比较简洁...移动到\0那个位置,还是可以使用我们的while循环,如下: while (*str1) { str1++; } (4)注意这里不能把循环条件写成str1++,因为如果str是\0了,循环是照常结束,...)然后我们继续分析,经过上面的循环,我们的str1指向的就是\0了,接着我们就把str2字符串完整的拷贝过来就可以了,这个拷贝的过程可以参考strcpy,可以把自增条件写在循环判断条件中,如下: while..., const char* str2 ); 函数实现: (1)首先还是对两个指针变量断言一下 (2)我们可以用一个while循环,判断一下 *str1 和 *str2是否相等,如果相等就进入循环,然后对
exp str2: -z "$str1" str1是否为空字符串 -n "$str1" str1是否不是空字符串 "$str1" == "$str2" str1是否与str2相等 "$str1" !...= "$str2" str1是否与str2不等 "$str1" =~ "str2" str1是否包含str2 特别注意,字符串变量最好用引号引起来,因为一旦字符串中有空格,这个表达式就错了,有兴趣的可以尝试当...for ((i = 0 ; i i++)); do echo $idone 循环打印0到9。...循环形式三: for i in {1..5}; do echo "Welcome $i"done 循环打印1到5。 循环方式四: while [ "$ans" !...= "yes" ]do read -p "please input yes to exit loop:" ansdone 只有当输入yes时,循环才会退出。即条件满足时,就进行循环。
*str)//递归的终止条件 return 0; else return 1 + my_strlen(str + 1); } int main() { char* a = "abcdefg...里究竟放的是什么, 我们可以通过调试上面的代码来得到答案: 可以看到,在执行 strcpy 函数后, str2 里实际存放的不只是 str1 的数据,只是在拷贝的时候将 str1 的 '\0' 拷贝过来了...str1 || *str2)//当 str1 和 str2 有一个不为 '\0' 时进行循环 { if (*str1 !...*tmp2)//如果循环结束的时候 tmp2 是'\0',说明上面的循环走到底了,也就是找到了 return str1; } str1++; } return NULL; } 当然,...errno来记录程序的当前错误码,只不过程序启动的时候errno是 0 ,表示没有错误,当我们在使用标准库中的函数的时候发生了某种错误,就会将对应的错误码存放在errno中,而一个错误码的数字是整数很难理解是什么意思
= "abcdef"; const char* str2 = "bbb"; if (strlen(str2) - strlen(str1) > 0) { printf("str2>str1\...strlen(str2)-strlen(str1),应该放回一个负数,应该打印str1>str2才对 其实并不是这样的 size_t类型是一个无符号的类型 str2-str1==-3;但是对于内存来说...= '\0')//优化2.可以将优化一的代码写成判断条件....模拟实现: int my_strlen(char* str1, char* str2) { while (*str1 == *str2) { if (*str1 = '\0') { return...errno来记录程序的当前错误码,只不过程序启动 的时候errno是0,表⽰没有错误,当我们在使⽤标准库中的函数的时候发⽣了某种错误,就会讲对应 的错误码,存放在errno中,⽽⼀个错误码的数字是整数很难理解是什么意思
当 str1 同时是 str2 的前缀和后缀时,函数返回 true;否则返回 false。...大体步骤如下: 1 **定义函数 isPrefixAndSuffix(str1, str2)**:实现一个函数,判断 str1 是否是 str2 的前缀和后缀。...• 检查 str1 的长度是否大于 str2 的长度。如果是,直接返回 false。 • 确定 str2 的前缀是否与 str1 相同。 • 确定 str2 的后缀是否与 str1 相同。...**遍历字符串数组 words**: • 使用两个嵌套循环,外层循环设定为 i,从 0 遍历到 len(words)-1,内层循环设定为 j,从 i+1 遍历到 len(words)-1。...4.返回计数器的值:最终,返回计数器的值,即为符合条件的下标对数量。 总时间复杂度 • 外层循环走 n 次,内层循环从 i+1 到 n,最坏情况下为 O(n)。
int main() { char str1[] = "ab"; char str2[] = "abcdefg"; if ((int)strlen(str1) -(int) strlen(str2...6.2 strcmp的模拟实现 int my_strcmp(const char* str1, const char* str2) { assert(str1 && str2);//确保没有传NULL..., const char* str2) { assert(str1 && str2);//确保不传NULL进来 char* cur = str1;//cur用来记录遍历点 char* s1 = NULL...= NULL; str = strtok(NULL, sep)) //for循环的书写恰好满足strtok,因为只有第一次(初始化)传str, //然后就一直传NULL(累加条件),直到str变成NULL...errno来记录程序的当前错误码,只不过程序启动 的时候errno是0,表⽰没有错误,当我们在使⽤标准库中的函数的时候发⽣了某种错误,就会讲对应的错误码,存放在errno中,⽽⼀个错误码的数字是整数很难理解是什么意思
, 字符a不等于指针str2指向arr4字符串的字符b,str1会指向下一个字符进行寻找, str1指向了字符b,发现与str2指向的相等,然后两个指针继续进行一次对比,又相等后,发现str1后的一个字符为...b,而str2此时为c,不相等,再指向下一个字符进行比较 在str1再指向下一个字符时,对比成功,在这str1和str2数次对比后,str2已经指向了字符'\0'(),此时终止比较,返回值为str1中bbc...while (*cur)//保证字符串cur即str1不为空 使用while循环遍历源字符串,直到遇到空字符'\0'。...errno来记录程序的当前错误码,只不过程序启动的时候errno是0,表示没有错误,当我们在使用标准库中的函数的时候发生了某种错误,就会讲对应的错误码,存放在errno中,而一个错误码的数字是整数很难理解是什么意思...这是打印0~9错误码的代码: int main() { int i = 0; for (i = 0; i i++) { printf("%d:%s\n", i, strerror(
1,一般而言,当我们定义一个字符串的时候,字符串要用单引号或者双引号括起来,单引号或者双引号的作用是一样的,如下: String str1 = '单引号'; String str2 = "双引号..."; 当字符串有换行需求的时候,我们可以用\n来代表一个换行符,如下: String str1 = '单引号\n这是第二行了'; print(str1); 打印结果如下: 单引号 这是第二行了...但是有没有一个更加可视化的定义可换行的字符串的方案呢,比如像下面这样直接换行: String str2 = "双引号 这是第二行了"; print(str2); 运行之后我们发现,程序报错了...List mylist = [1, 2, 3, 4, 5, 6, 7, 8]; //for循环 for (var i = 0; i i++) {...print(mylist[i]); } //for-in循环 for (var a in mylist) { print(a); } //forEach循环遍历集合的每个元素
= "abcdef"; const char* str2 = "bbb"; if(strlen(str2)-strlen(str1)>0) { printf("str2>str1\n"...); } else { printf("srt1>str2\n"); } return 0; } 因为strlen返回值为无符号整型,所以if条件中的不是 3 - 6 = -3,而应该是..., const char* str2) { assert(str1 && str2); while (*str1 == *str2) { if (*str1 == '\0') { return..., const char * str2); 在str1中找str2字符串第一次出现的位置, 找到了就返回第一次出现的起始地址,找不到返回NULL; 注意: 函数返回字符串str2在字符串str1...errno来记录程序的当前错误码,只不过程序启动的时候errno是0,表示没有错误 当我们在使用标准库中的函数的时候发生了某种错误,就会将对应的错误码,存放在errno中,而⼀个错误码的数字是整数很难理解是什么意思
注:-n亦可忽略test str1 == str2 判定str1是否等于str2,若相等,则返回truetest str1 !...= str2 判定str1是否不等于str2,若相等,则返回false6.多重条件判定,例如:test -r filename -a -x filename-a (and)两条件同时成立。...;else 当条件判断式不成立时,可以进行的命令工作内容;fi 意思。...是循环的开始 程序段落done 循环的结束until与while相反,它是【当condition条件成立时,就终止循环,否则就持续进行循环的程序段...i=1设置好; 限制值 : 当变量的值在这个限制值的范围内,就继续进行循环,例如i循环,变量也变化,例如i=i+1。
, const char* str2); 它的原型中参数看起来很简单,就是两个字符串,那它的返回值是什么呢?...有两种情况,如果在字符串str1中找到了字符串str2,那么就返回str1中找到str2的起始位置,如果没有在字符串str1中找到字符串str2,那么就返回一个空指针 所以在使用的时候,我们就可以通过它的返回值来确认是否找到对应的字符串...strtok,并且将它赋值给p指针,随后我们调用strtok的第一个参数就只需要传空指针,就可以写在循环的调整部分 而中间的循环结束条件为什么设置为不等于NULL呢?...来记录程序的当前错误码,只不过程序启动的时候errno是0,表⽰没有错误 但是如果当我们在使⽤标准库中的函数的时候发⽣了某种错误,就会将对应的错误码,存放在errno中,而⼀个错误码的数字是整数很难理解是什么意思...= 0; for (i = 0; i i++) { printf("%s\n", strerror(i)); } return 0; } 在Windows11+VS2022环境下输出的结果如下
= "abcdef"; const char* str2 = "bbb"; if (strlen(str2) - strlen(str1) > 0) { printf("str2>str1\...str2[20]; strcpy(str1, "To be "); strcpy(str2, "or not to be"); strncat(str1, str2, 6); printf("...* cur = str1; //特殊情况 - str2指向的是空字符串,直接返回str1 if (*str2 == '\0') return str1; while (*cur) {...errno来记录程序的当前错误码,只不过程序启动的时候errno是0,表示没有错误,当我们在使用标准库中的函数的时候发生了某种错误,就会将对应的错误码,存放在errno中,而一个错误码的数字是整数很难理解是什么意思...= 0; for (i = 0; i i++) { printf("%s\n", strerror(i)); } return 0; } 上面的代码,在Windows11+VS2019
,const char* str2) { while(*str1==*str2) { if(*str1=='\0') return 0;...中str2第一次出现的指针,如果str2不是str1的一部分,则返回空指针 这里的意思是str2作为str1中作为子集,从str1中寻找str2所有的字符串,然后以一个char*变量来接收如果可以找到就返回结果...,const char* str2) { assert(str1 && str2); const char *a = str1; const char *b = str2;...n) { char* ret = dest; int num=n;//将一共需要覆盖多少次赋值给num while (*s &&num--)num--当num或者s中其中一个条件不满足跳出循环...{ *ret++ = *s++; } for (int i=num; i i++)//如果num目前已经==n,那么就不满足条件 {
领取专属 10元无门槛券
手把手带您无忧上云