Error[8]: Undefined offset: 85, File: /www/wwwroot/outofmemory.cn/tmp/plugin_ss_superseo_model_superseo.php, Line: 121
File: /www/wwwroot/outofmemory.cn/tmp/plugin_ss_superseo_model_superseo.php, Line: 473, decode(

目录

一:长度不受限制的字符串函数 1.strlen 2.strcpy 3.strcat 4.strcmp

int strcmp(const char * str1,const char *str2)

二:长度受限制的字符串函数 1.strncpy 2.strncat 3.strncmp

int strncmp(const char * str1,const char *str2,size_t num)

三:字符串查找函数strstr

char* strstr(const char * str1,const char *str2)

四:分割字符串函数strtok 五:打印错误信息函数strerror )
File: /www/wwwroot/outofmemory.cn/tmp/route_read.php, Line: 126, InsideLink()
File: /www/wwwroot/outofmemory.cn/tmp/index.inc.php, Line: 165, include(/www/wwwroot/outofmemory.cn/tmp/route_read.php)
File: /www/wwwroot/outofmemory.cn/index.php, Line: 30, include(/www/wwwroot/outofmemory.cn/tmp/index.inc.php)
Error[8]: Undefined offset: 86, File: /www/wwwroot/outofmemory.cn/tmp/plugin_ss_superseo_model_superseo.php, Line: 121
File: /www/wwwroot/outofmemory.cn/tmp/plugin_ss_superseo_model_superseo.php, Line: 473, decode(

目录

一:长度不受限制的字符串函数 1.strlen 2.strcpy 3.strcat 4.strcmp

int strcmp(const char * str1,const char *str2)

二:长度受限制的字符串函数 1.strncpy 2.strncat 3.strncmp

int strncmp(const char * str1,const char *str2,size_t num)

三:字符串查找函数strstr

char* strstr(const char * str1,const char *str2)

四:分割字符串函数strtok 五:打印错误信息函数strerror )
File: /www/wwwroot/outofmemory.cn/tmp/route_read.php, Line: 126, InsideLink()
File: /www/wwwroot/outofmemory.cn/tmp/index.inc.php, Line: 165, include(/www/wwwroot/outofmemory.cn/tmp/route_read.php)
File: /www/wwwroot/outofmemory.cn/index.php, Line: 30, include(/www/wwwroot/outofmemory.cn/tmp/index.inc.php)
Error[8]: Undefined offset: 87, File: /www/wwwroot/outofmemory.cn/tmp/plugin_ss_superseo_model_superseo.php, Line: 121
File: /www/wwwroot/outofmemory.cn/tmp/plugin_ss_superseo_model_superseo.php, Line: 473, decode(

目录

一:长度不受限制的字符串函数 1.strlen 2.strcpy 3.strcat 4.strcmp

int strcmp(const char * str1,const char *str2)

二:长度受限制的字符串函数 1.strncpy 2.strncat 3.strncmp

int strncmp(const char * str1,const char *str2,size_t num)

三:字符串查找函数strstr

char* strstr(const char * str1,const char *str2)

四:分割字符串函数strtok 五:打印错误信息函数strerror )
File: /www/wwwroot/outofmemory.cn/tmp/route_read.php, Line: 126, InsideLink()
File: /www/wwwroot/outofmemory.cn/tmp/index.inc.php, Line: 165, include(/www/wwwroot/outofmemory.cn/tmp/route_read.php)
File: /www/wwwroot/outofmemory.cn/index.php, Line: 30, include(/www/wwwroot/outofmemory.cn/tmp/index.inc.php)
Error[8]: Undefined offset: 88, File: /www/wwwroot/outofmemory.cn/tmp/plugin_ss_superseo_model_superseo.php, Line: 121
File: /www/wwwroot/outofmemory.cn/tmp/plugin_ss_superseo_model_superseo.php, Line: 473, decode(

目录

一:长度不受限制的字符串函数 1.strlen 2.strcpy 3.strcat 4.strcmp

int strcmp(const char * str1,const char *str2)

二:长度受限制的字符串函数 1.strncpy 2.strncat 3.strncmp

int strncmp(const char * str1,const char *str2,size_t num)

三:字符串查找函数strstr

char* strstr(const char * str1,const char *str2)

四:分割字符串函数strtok 五:打印错误信息函数strerror )
File: /www/wwwroot/outofmemory.cn/tmp/route_read.php, Line: 126, InsideLink()
File: /www/wwwroot/outofmemory.cn/tmp/index.inc.php, Line: 165, include(/www/wwwroot/outofmemory.cn/tmp/route_read.php)
File: /www/wwwroot/outofmemory.cn/index.php, Line: 30, include(/www/wwwroot/outofmemory.cn/tmp/index.inc.php)
一篇文章带你搞懂字符串函数_C_内存溢出

一篇文章带你搞懂字符串函数

一篇文章带你搞懂字符串函数,第1张

目录
  • 一:长度不受限制的字符串函数
    • 1.strlen
    • 2.strcpy
    • 3.strcat
    • 4.strcmp
  • 二:长度受限制的字符串函数
    • 1.strncpy
    • 2.strncat
    • 3.strncmp
  • 三:字符串查找函数strstr
  • 四:分割字符串函数strtok
  • 五:打印错误信息函数strerror

一:长度不受限制的字符串函数 1.strlen
  • 首先给出在VS编译器下strlen函数的声明
  • size_t strlen(const char* str);
  • 这里的strlen 函数的返回类型size_t
  • 是VS里面自定义的一种类型,和unsigned int 相同
  • 故strlen最终会返回一个无符号整型,代表所求字符串的大小
  • 参数为一个char *类型的指针,(*str)整体被const修饰是为了防止指针str指向的内容即(*str)被修改
  • 作用:用来求出一个字符串的长度,不包括‘
  • chat * strcat(char * destination,const char * source)
  • 简单例子:
    本章中所有的字符串函数都需要先引用头文件
2.strcpy
  • chat * strcpy(char * destination,const char * source)

  • 返回类型为char *,即字符指针,返回的是destination的地址

  • 参数为两个char *类型的指针,destination用于接收接下来要被覆盖的字符串的首地址,source用于接收用于拷贝的字符串的首地址,为了防止source指向的内容被修改,故用const 修饰,而destination指向的内容要被修改,不加const(下文中有关const的部分不再强调)

  • 注意点:

  • 1:源字符串必须以‘\0’结束

  • 2:会将源字符串中的‘\0’拷贝到目标空间中

  • 3:目标空间必须足够大,确保能够存放源字符串

  • 作用:将一个字符串b的内容复制到另一个字符串a中,a中内容会被修改

  • 简单例子:

  • 源字符串不以‘\0’带来的问题:

  • strcpy不知何时结束,会引发异常

3.strcat
  • 返回类型为char *,即字符指针,返回的是destination的地址
  • 参数为两个char *类型的指针,destination用于接收接下来要被覆盖的字符串的首地址,source用于接收用于追加的字符串的首地址
  • 注意点:
  • 1:源字符串必须以‘
  • 2:会将源字符串中的‘
  • 3:目标空间必须足够大并且可以被修改,确保能够追加源字符串
  • ’也追加到目标空间中’结束
  • 4:不能自我追加
  • 作用:将一个字符串b的内容追加到另一个字符串a中,a中内容会被修改
  • 自我追加不可行,但是用后面提及的strncat可以
  • 返回类型为int
  • 如果str1=str2,返回等于0的数字
  • 简单例子:
  • 如果str1
4.strcmp

int strcmp(const char * str1,const char *str2)

  • 仔细想想,字符串名代表首元素的地址,你直接写if(str1
  • 如果str1>str2,返回大于0的数字
  • 这比较的是两个地址的大小,而地址是内存随机分配的,它们的大小都不是确定的
  • 参数为两个char *类型的指针,str1用于接收字符串1的首地址,str2字符串2的首地址
  • 或许你会疑惑两个字符串为什么不能用>,<,==来比较
  • 究竟是如何比较的呢?
  • 是把字符串中的字符一个个比较它们的ASCALL码值,相等就比较下一个字符,不相等直接返回大于0或小于0,每个字符都相等才返回0
  • 作用:比较两个字符串的大小
  • 简单例子:
  • 字符‘W’的ASCALL码值大于字符‘C’的ASCALL码值,返回大于0的数字1
  • chat * strncpy(char * destination,const char * source,size_t num)
  • 返回类型为char *,即字符指针,返回的是destination的地址

  • 参数为两个char *类型的指针和一个无符号整型,destination用于接收接下来要被覆盖的字符串的首地址,source用于接收用于拷贝的字符串的首地址,num用于接收要拷贝的字符的个数
二:长度受限制的字符串函数 1.strncpy
  • 作用:将一个字符串b的中num个字符复制到另一个字符串a中,a中内容会被修改
  • 优点:能控制复制字符的个数,更加安全
  • 简单例子:
  • chat * strncat(char * destination,const char * source,size_t num)
  • 返回类型为char *,即字符指针,返回的是destination的地址
  • 可以实现自我追加
2.strncat
  • 作用:将一个字符串b中num个字符追加到另一个字符串a中,a中内容会被修改
  • 简单例子:
  • 参数为两个char *类型的指针和一个无符号整型,destination用于接收接下来要被覆盖的字符串的首地址,source用于接收用于追加的字符串的首地址,num用来决定追加几个字符
    -
  • 返回类型为int
  • 参数为两个char *类型的指针,str1用于接收字符串1的首地址,str2字符串2的首地址
  • num决定比较前num个字符
3.strncmp

int strncmp(const char * str1,const char *str2,size_t num)

  • 是把字符串中的字符一个个比较它们的ASCALL码值,相等就比较下一个字符,不相等直接返回大于0或小于0,每个字符都相等才返回0
  • 作用:比较两个字符串前num个字符的大小
  • 简单例子:
  • 可以看到,比较前6个字符时,两个串因为前6个字符相同,返回0
  • 返回类型为char*,在 str1中查找str2,若str2在str1中,则返回str2的首元素在str1中的地址
  • 比如str1=“abbbd”,str2=“bd”,会返回str1中第四个元素b的地址
  • 若str2不在str1中,则返回空指针NULL
  • 而比较前7个字符时,由于a字符串第七个字符‘W’的ASCALL码 >b字符串的第七个字符’C’的ACSALL码,故返回大于0的数字1
三:字符串查找函数strstr

char* strstr(const char * str1,const char *str2)

  • 简单例子:
  • char * strtok(char * str,const char * sep)
  • 这是一个比较奇特的函数,使用的场景也较少
  • sep参数是个字符串,定义了用作分隔符的字符集合
  • 可以看到,c 的地址和a[3]的地址相同,字符串d不在字符串a中,返回空指针
四:分割字符串函数strtok
  • 第一个参数指定一个字符串,它包含了0个或者多个由sep字符串中一个或者多个分隔符分割的标记
  • strtok函数找到str中的下一个标记,并将其用
  • strtok函数的第一个参数不为 NULL ,函数将找到str中第一个标记,strtok函数将保存它在字符串中的位置。
  • 结尾,返回一个指向这个标记的指针。(注:strtok函数会改变被 *** 作的字符串,所以在使用strtok函数切分的字符串一般都是临时拷贝的内容并且可修改。)
  • strtok函数的第一个参数为 NULL ,函数将在同一个字符串中被保存的位置开始,查找下一个标记。
  • 如果字符串中不存在更多的标记,则返回 NULL 指针。
  • 总结:第一次传参是传入要分割的字符串,之后通通传入空指针即可
  • 你是不是觉得这样子使用很麻烦,我们可以用一个循环搞定它
  • 初始化只有一次,我们需要传字符串a也只有一次,可以把ret=strtok(a,p)放在初始化条件上
  • 是不是感觉上面说的不是人话?看个例子应该能帮助你理解
  • 之后每次循环都传的是空指针NULL,故在3处写成ret=(NULL,p)一直循环
  • 当ret的返回值不是NULL时说明还没分割完,故循环条件为ret!=NULL
  • char *strerror(int errnum)
  • 返回值是一个指针变量char*
  • C语言中回根据参数errnum 不同的值返回不同的地址
  • 指向了不同的字符串,也就是不同的错误信息
五:打印错误信息函数strerror
  • 实际中的应用:
  • 我们只需要打印出来查看是什么错误即可。
  • 其中errno为全局错误码,需要引用头文件,当我们打开一个不存在的文件时,发生了错误,全局错误码的值会自动被修改。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/706946.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-04-24
下一篇 2022-04-24

发表评论

登录后才能评论

评论列表(0条)

保存