您的位置:首页 > 新闻 > 资讯 > 怎么处理脓包痘痘_小程序制作平台排行榜前十名_产品设计公司_昆明装饰企业网络推广

怎么处理脓包痘痘_小程序制作平台排行榜前十名_产品设计公司_昆明装饰企业网络推广

2024/12/28 0:59:19 来源:https://blog.csdn.net/2201_75859310/article/details/143633592  浏览:    关键词:怎么处理脓包痘痘_小程序制作平台排行榜前十名_产品设计公司_昆明装饰企业网络推广
怎么处理脓包痘痘_小程序制作平台排行榜前十名_产品设计公司_昆明装饰企业网络推广

1.strlen(求字符串长度)

要有头文件 #include <string.h>h

字符串以'\0'作为结束标志,strlen函数返回字符串中'\0'前面出现的字符个数(不包含'\0'),函数返回值是无符号的

因为返回的是无符号数,所以一定是正数大于0 

参数指向的字符串要以'\0'结束

size_t strlen (const char* str);

2.模拟实现strlen

assert断言 (指针是否是空指针)

1)计数器

#include <stdio.h>
#include <string.h>
#include <assert.h>
int mystrlen(const char*str){int count=0;assert(str);while(*str!='\0'){count++;str++;}return count;}
int main(){char arr[]="hello";int len=mystrlen(arr);printf("%d\n",len);return 0;
} 

2)递归 (不创建临时变量,求字符串长度)

int mystrlen(const char*str){if(*str!='\0')return 1+mystrlen(str+1);elsereturn 0;
}

3)指针-指针

	const char*des=str;while(*str!='\0'){str++;}int count=str-des;return count;
}

2.strcpy

拷贝 

char * strcpy(char * destination,const char * source)

 

源字符串必须以'\0'结束,源字符串中的'\0'也会拷贝到目标空间,目标空间要足够大且可变

2.模拟实现

char*mystrcpy(char *dest,const char*src){assert(dest&&src);char*ret=dest;//返回目标空间起始地址 while(*dest++=*src++){;}return ret;
}
int main(){char arr1[]="haha";char arr2[20]={0};mystrcpy(arr2,arr1);printf("%s",arr2);return 0;
}

 

 3.strcat(追加)

char * strcat(char * destination,const char * source)

从目标字符串的'\0'位置开始追加,并把自己的'\0'也添加到目标字符串

2.模拟实现

#include <stdio.h>
#include <string.h>
#include <assert.h>
char *mystrcat(char* dest,const char*src){assert(dest&&src);char*ret=dest;while(*dest!='\0'){dest++;}while(*dest++=*src++){;}return ret;
}

 4.strcmp(字符串比较)

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

比较规则:第一个字符串大于第二个字符串(比较对应的字符)返回大于0的数,等于返回0,小于返回小于0的数;

 2.模拟实现

	assert(str1 && str2);while(*str1==*str2){if(*str1=='\0')return 0;str1++;str2++;}if(*str1>*str2)return 1;else return -1;
}

5.strncpy

char* strncpy(char *destination,const char *source,size_t num);

拷贝num个字符到目标空间,如果源字符串的长度小于num,则在后边追加0,直到num个

6.strncat

char* strncat(char *destination,const char *source,size_t num);

7.strncmp

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

8.strstr

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

( 用于查找一个字符串在另一个字符串中的首次出现位置)

  • 如果找到了 str2子串,strstr 函数会返回指向 str1 中第一次出现 str2 的位置的指针。
  • 如果没有找到 str2,或者 str2 是空字符串(只包含终止符 \0),则返回 str1本身

9.strtok

char* strtok(char * str,const char* sep);

strtok 函数用于将字符串分割成一系列的子字符串(标记)

sep参数字符串,定义了用作分隔符的字符集合

str:这是要分割的原始字符串。在首次调用 strtok 时,应提供完整的字符串;在后续调用中,应该传入 NULL,这表示继续使用上次调用 strtok 后剩余的部分进行分割

  • strtok 返回指向下一个标记(子字符串)的指针。
  • strtok 返回指向下一个标记(子字符串)的指针。

10.strerror

strerror 函数用于将错误代码转换为对应的错误消息字符串,通常与 <errno.h> 头文件一起使用,因为错误代码通常保存在 errno 变量中。

11.memcpy

void *memcpy(void *dest, const void *src, size_t n);

memcpy 函数用于在内存中复制一块数据

  • dest:目标地址,即要复制到的内存区域的起始地址。
  • src:源地址,即要复制的内存区域的起始地址。
  • n:要复制的字节数

memcpy 返回指向目标内存区域 dest 的指针

12.memmove

void *memmove(void *dest, const void *src, size_t n);

memmove 函数用于在内存中复制一块数据,与 memcpy 类似,但它允许源和目标内存区域重叠。

memmove 允许源和目标内存区域重叠。它会正确处理重叠的情况,确保数据不会被意外覆盖

#include <stdio.h>
#include <string.h>int main() {char str[50] = "Hello, world!";// 将 "world!" 移动到 "Hello, " 的位置memmove(str + 7, str + 13, 6);printf("String after memmove: %s\n", str);return 0;
}

13.memcmp

int memcmp(const void *s1, const void *s2, size_t n);

memcmp 函数用于比较两个内存区域的内容,

  • s1:指向第一个内存区域的指针。
  • s2:指向第二个内存区域的指针。
  • n:要比较的字节数
  • 如果两个内存区域的前 n 个字节完全相同,memcmp 返回 0。
  • 如果 s1 的前 n 个字节小于 s2 的前 n 个字节,memcmp 返回一个小于 0 的值。
  • 如果 s1 的前 n 个字节大于 s2 的前 n 个字节,memcmp 返回一个大于 0 的值

memcmp 比较的是内存区域的二进制内容,而不是字符内容。因此,它适用于任何形式的二进制数据。适用于比较任何形式的二进制数据。它不仅限于字符串,还可以用于数组、结构体等复杂数据类型的比较

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com