字符串函数

        C库提供了多个处理字符串的函数,ASCII把这写函数放在string.h头文件中,其中最常见的函数有strlen()、strcmp()、strcpy()、strcat()、strncat()、strncpy()、strncmp,还有sprintf()。

     1.strlen()函数

  strlen()函数用于统计字符串的长度,遇到‘\0’结束。

#include <stdio.h>
#include <string.h>
int main(void){
    char ch1[10]="hello"
    char ch2[10]={'a','b','v','g','s','\0','a','\0'};
    printf("ch1=%ld,ch2=%ld\n",strlen(ch1),strlen(ch2));//输出ch1=5,ch2=5
    return 0;
}

2.strcat()函数

        strcat(char* dest, const char* src);dest是目标字符串的指针,src是源字符串的指针。strcat()是将src指向的字符串复制到dest指向的字符串末尾,并确保字符串以'\0'结束,要注意“dest”必须有足够的空间来容纳附加的字符串,包括空终止符。如果没有足够的空间,可能会导致缓冲区溢出,这是一种常见的安全问题。

3.strncat()函数

        strncat(char* dest, const char* src, size_t num);是将src指向的字符串复制到dest指向的字符串末尾。这里 `dest` 是目标字符串的指针,`src` 是源字符串的指针,`num` 是要从 `src` 中复制的最大字符数(不包括空终止符)。

        如果 `num` 大于源字符串的实际长度,`strncat()` 仅复制源字符串的全部内容,并在末尾添加一个空字符。

        如果 `num` 等于源字符串的实际长度,`strncat()` 会复制源字符串的所有字符,但不会添加额外的空字符,因为 `destination` 已经有一个空字符。

        如果 `num` 小于源字符串的实际长度,`strncat()` 会在复制 `num` 个字符后停止,并在末尾添加一个空字符。

4.strcmp()函数

     strcat(char* dest, const char* src);dest是目标字符串的指针,src是源字符串的指针。这里 `dest` 和 `src` 分别是指向待比较的两个字符串的指针、区分大小写。`strcmp()` 函数返回一个整数值,该值表示两个字符串之间的关系:

 如果 `dest` 和 `src` 相同,则返回 0。

 如果 `dest` 在ASCII顺序上小于 `src`,则返回负数-1,但是在C99之后返回值为俩ASCII码之差。

 如果 `dest` 在字典顺序上大于 `src`,则返回正数1,但是在C99之后返回值为俩ASCII码之差。

char s1[20]="hello";
char s2[20]="Hello";
char s3[20]="hello";
printf("strcmp(s1,s2)=%ld",strcmp(s1,s2)=%ld)//32
printf("strcmp(s2,s1)=%ld",strcmp(s2,s1)=%ld)//-32
printf("strcmp(s1,s3)=%ld",strcmp(s1,s3)=%ld)//0

5.strncmp()函数

        strncmp(const char* str1, const char* str2,size_t n),这里 `str1` 和 `str2` 分别是指向待比较的两个字符串的指针,`n` 是要比较的字符数,比较字符串str1和str2前n个字符是否相同,区分大小写。strncmp()` 函数返回一个整数值,该值表示两个字符串之间的关系:

         如果前n个相同,则返回 0。

         如果 `str1` 前n个在ASCII顺序上小于 `str2`前n个,则返回负数-1,但是在C99之后返回值为俩ASCII码之差。

         如果 `str1` 前n个在ASCII顺序上大于 `str2`前n个,则返回正数1、但是在C99之后返回值为俩ASCII码之差。

char s1[20]="hello";
char s2[20]="Hell";
char s3[20]="hel";
printf("strncmp(s1,s2,3)=%ld",strcmp(s1,s2)=%ld)//32
printf("strncmp(s2,s1,3)=%ld",strcmp(s2,s1)=%ld)//-32
printf("strncmp(s1,s3,2)=%ld",strcmp(s1,s3)=%ld)//0

6.strcpy()函数

        char* strcpy(char* dest, const char* src),这里 `dest` 是目标字符串的指针,`src` 是源字符串的指针。 `strcpy()` 函数会将 `src` 指向的字符串(包括空终止符)复制到 `dest` 指向的位置、从dest的'\0'位置开始。复制完成后,`dest` 也将以空字符 `\0` 结束。

        strcpy() 不检查目标缓冲区的大小,因此如果目标缓冲区太小,可能会导致未定义行为或安全漏洞。 如果 `src` 字符串比 `dest` 缓冲区长,`strcpy()` 会继续复制直到遇到空终止符,这可能导致 `dest 缓冲区溢出。

char s1[20]="hello";
char s2[20]="word";
char s3[5]="Days";
strcpy(s1,s2);
strcpy(s3,s1);
puts(s1);//helloword
puts(s3);//Dayshello 

7.strncpy()函数

        char* strncpy(char* dest, const char* src,size_t n),strncpy()用于将一个字符串的前 n 个字符复制到另一个字符串。'dest' 是目标字符串的指针,`src` 是源字符串的指针,`n` 是要从 `src` 中复制的最大字符数(不包括空终止符)

        如果 `n` 大于源字符串的实际长度,`strncpy()` 仅复制源字符串的全部内容,并在末尾添加一个空字符。

         如果 `n` 等于源字符串的实际长度,`strncpy()` 会复制源字符串的所有字符,但不会添加额外的空字符,因为 `dest 已经有一个空字符。

        如果 `n` 小于源字符串的实际长度,`strncpy()` 会在复制 ‘n’ 个字符后停止,并在末尾添加一个空字符。

char s1[20]="hello";
char s2[20]="word";
char s3[5]="Days";
strncpy(s1,s2,10);
strncpy(s3,s1,1);
puts(s1);//helloword
puts(s3);//Daysh

多维数组

        二维数组表示: 类型说明符 数组名[常量表达式1][常量表达式2]。

        n维数组表示: 类型说明符 数组名[常量表达式1][常量表达式2]....[常量表达式n]。

        n维数组存储方式先按行存储的,都可以看成n-1维数组类型的一维数组组成的,n-1维数组可以由n-2维数组类型的一维数组组成的。最终可以了解维有n个一维数组构成n维数组。

这里以二位数组为例说明多维数组;通过多重for循环遍历其中的每个数据。

初始化:

int a[3][3];
a[3][3]={1,2,3,4,5,6,7,8,9};//全部初始化
a[3][3]={{1,2,3},{4,5,6},{7,8,9}};//全部初始化
a[3][3]={{1,2},{4,5},{7,8}};//部分初始化,剩下补0
a[3][3]={};//初始化为0

  • 4
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值