C语言之常见字符串处理函数

C语言之常见字符串处理函数

在这里插入图片描述

1.测试长度函数
头文件:#include<string.h>
函数原型:size_t strlen(const char *s);//不能指针修改内容
函数功能:测s指向的字符串长度,不包括'\0'
返回值:字符串中字符的个数
例子:
#include<stdio.h>
#include<string.h>
int main()
{
    char str1[20]="hello";
    char *str2="hello";
    printf("%d\n",sizeof(str1));//20
    printf("%d\n",sizeof(str2));//8
    printf("%d\n",strlen(str1));//5
    printf("%d\n",strlen(str2));//5
    return 0;
}
2.字符串拷贝函数
头文件:#include<string.h>
函数原型:char * strcpy(char *dest,const char *src);
函数功能:拷贝src指向的字符串到dest指针指向的内存中,'\0'也会拷贝
返回值:目的内存的地址
注意:在使用此函数的时候,必须保证dest指向的内存空间足够大,否则会造成内存污染
头文件:#include<string.h>
函数原型:char * strncpy(char *dest,const char *src,size_t n);
函数功能:拷贝src指向的字符串的前n个字节到dest指针指向的内存中,'\0'不会拷贝
返回值:目的内存的地址
注意:
1.strncpy不拷贝'\0'
2.如果说n大于src指向的字符串的字符个数,则在dest后面填充n-strlen(src)'\0'

例子

#include<stdio.h>
#include<string.h>
int main(void){

    char str1[10] = "Hello";
    char str2[10] = "Hello";
    strcpy(str1, "haha");  // 会拷贝/0
    printf("%s\n", str1);
    strncpy(str2, "haha", 2); // 不会好拷贝/0
    printf("%s\n", str2);
    return 0;
}
PS E:\code\c_code> cd "e:\code\c_code\" ; if ($?) { gcc test.c -o test } ; if ($?) { .\test }
haha
hallo
3.字符串追加函数
头文件:#include<string.h>
函数原型:char * strcat(char *dest,const char *src);
函数功能:strcat函数追加src的字符串到dest指向的字符串后面,追加的时候追加'\0'
返回值:目的内存的地址
注意:要保证dest指向的空间足够大
头文件:#include<string.h>
函数原型:char * strncat(char *dest,const char *src,size_t n);
函数功能:strcat函数追加src的字符串前n个字符到dest指向的字符串后面,追加的时候会追加'\0'
返回值:目的内存的地址
注意:要保证dest指向的空间足够大

例子

#include<stdio.h>
#include<string.h>
int main(void){
    char dest1[100]="Hello";
    char dest2[100]="Hello";
    char *src = "World";
    strcat(dest1,src); // dest1 = "HelloWorld"
    strncat(dest2,src,3); // dest2 = "HelloWor"
    printf("dest1: %s\n",dest1);
    printf("dest2: %s\n",dest2);
    return 0;
}
4.字符串比较函数
头文件:#include<string.h>
函数原型:int strcmp(const char *s1,const char *s2);
函数功能:比较s1与s2指向字符串的大小
比较方法:逐个比较字符的ascii码,一旦比出大小函数立即返回,如果字符串一样,返回0
返回值:如果s1指向字符串大于s2指向的字符串返回1
如果s1指向字符串小于s2指向的字符串返回-1
如果相等,返回0
头文件:#include<string.h>
函数原型:int strncmp(const char *s1,const char *s2,size_t n);
函数功能:比较s1与s2指向字符串的的前n个字符
比较方法:逐个比较字符的ascii码,一旦比出大小函数立即返回,如果字符串一样,返回0
返回值:如果s1指向字符串大于s2指向的字符串返回1
如果s1指向字符串小于s2指向的字符串返回-1
如果相等,返回0

例子

#include<stdio.h>
#include<string.h>
int main(void){
    char dest1[100]="Helao";
    char dest2[100]="Helbo";
    int ret_strcmp = strcmp(dest1, dest2);
    int ret_strncmp= strncmp(dest1, dest2, 3);
    printf("ret_strcmp=%d\n", ret_strcmp);
    printf("ret_strncmp=%d\n", ret_strncmp);
    return 0;
}
PS E:\code\c_code> cd "e:\code\c_code\" ; if ($?) { gcc test2.c -o test2 } ; if ($?) { .\test2 }
ret_strcmp=-1
ret_strncmp=0
5.字符串匹配函数
头文件:#include<string.h>
函数原型:char * strstr(const char *s1,const char *s2);
函数功能:在s1指向的字符串中找s2指向的字符串,首次匹配
返回值:找到了就返回找到字符串的首地址
找不到返回NULL
#include <stdio.h>
#include <string.h>
int main(void)
{
    char *s1 = "ggbondbond";
    char *s2 = "bond";
    char *p = strstr(s1, s2);
    if (NULL == p)
    {
        printf("没有找到该字符串\n");
    }
    else
    {
        printf("找到该字符串\n");
        printf("p-s1=%d\n", p - s1);
        printf("p=%s\n", p);
    }
    return 0;
}
PS E:\code\c_code> cd "e:\code\c_code\" ; if ($?) { gcc test2.c -o test2 } ; if ($?) { .\test2 }
找到该字符串
p-s1=2
p=bondbond
6.字符串转换数值
atoi、atol、atof // 字符串转换数值函数
头文件:#include<stdlib.h>
函数原型:int atoi(const char *ptr);
函数功能:将ptr指向的字符串转换成整数,返回
返回值:转换后的整数,如无法转换则返回0

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main(void)
{

    char s[10] = "999";
    char s1[10] = "999";
    char s2[10] = "99.9";
    int num = atoi(s);
    long num1 = atol(s1);
    float num2 = atof(s2);

    printf("num = %d\n", num);
    printf("num1 = %ld\n", num1);
    printf("num2 = %f\n", num2);

    /*函数会跳过以转义符开头的空白字符,直到遇到数字或正负号为止,
    然后将遇到的数字转换为整数,遇到非数字字符就停止转换*/
    char *str = "\t \n -44qwe12";
    printf("atoi(str) = %d\n", atoi(str));
    return 0;
}
PS E:\code\c_code> cd "e:\code\c_code\" ; if ($?) { gcc test2.c -o test2 } ; if ($?) { .\test2 }
num = 999
num1 = 999
num2 = 99.900002
atoi(str) = -44
7.内存拷贝函数
头文件:#include<string.h>
函数原型: void *memcpy(void *dest, const void *src, size_t n);
功能:
该函数用于从源内存地址 src 处复制 n 个字节的数据到目标内存地址 dest 处。
返回值:
返回指向目标内存地址 dest 的指针。
注意事项:
memcpy 不会检查目标内存区域是否有足够的空间来存储复制的数据,因此需要确保 dest 有足够的空间,否则可能会导致缓冲区溢出。
如果源内存区域和目标内存区域有重叠,memcpy 的行为是未定义的。

#include <stdio.h>
#include <string.h>
int main(void)
{
    int a[] = {1, 2, 3, 4, 5};
    int b[10] = {0};
    memcpy(b, a, sizeof(a)); // 拷贝a到b
    for (int i = 0; i < 10; i++)
    {
        printf("%d ", b[i]);
    }
    return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

繁星北斗

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值