string.h 详解

news/2024/11/30 3:50:05/

string.h

简介

C语言标准库中一个常用的头文件,在使用到字符数组时需要使用。

函数简介

函数功能简介
memchr在内存块中定位字符的位置
memcmp把两个内存块的内容进行比较。
memcpy复制内存块的内容
memmove移动内存块中的内容
memset以字节方式填充内存块
strcat把一个字符串后追加到另一个字符串后
strchr在字符串中查找一个字符的第一个位置指针
strcmp比较两个字符串(ASCII)
strcoll比较两个字符串(根据指定的 LC_COLLATE
strcpy复制字符串
strcspn在一个字符串中查找另一个字符串中的第一个出现的字符的位置
strerror解释错误代码
strlen返回字符串长度
strncat把一个字符串的 n 个字符后追加到另一个字符串后
strncmp比较两个字符串的前 n 个字符(ASCII)
strncpy复制字符串中的前 n 个字符
strpbrk查找字符串中第一个出现的属于另一个字符串的任意字符的指针
strrchr查找字符串中一个字符的出现的最后位置
strspn计算字符串的从开头起符合另一个字符串的连续字符个数
strstr在一个字符串中查找另一个字符串
strtok根据指定字符集分割一个字符串
strxfrm根据当前环境转化字符串,将转化后的前 n 个字符复制给另一个字符串

函数

memchr

  • 原型:const void * memchr ( const void * ptr, int value, size_t num );
    void * memchr ( void * ptr, int value, size_t num );

  • 说明:在参数 ptr 所指向的内存块的前 num 个字节中搜索第一次出现字符 value(一个无符号字符)的位置,并返回相应的指针

  • 返回值:找到返回相应的指针,否则返回 NULL

  • 实例:

#include <stdio.h>
#include <string.h>char str[1000], ch, *pch;int main(){gets(str);ch = getchar();pch = (char*) memchr(str, ch, strlen(str));       // memchr 的使用if ( pch != NULL){printf ("%c found at %d.\n", ch, pch - str);}else{printf ("%c not found.\n", ch);}return 0;
}

memcmp

  • 原型:int memcmp ( const void * ptr1, const void * ptr2, size_t num );

  • 说明:比较 ptr1 所指向的内存块的前 num 个字节和 ptr2 所指的内存块中的前 num 个字节(均被视为无符号字符进行比较)。

  • 返回值:

    返回值比较的为指针所指向的内容
    < 0ptr1 < ptr2
    0ptr1 == ptr2
    > 0ptr1 > ptr2
  • 实例:

#include <stdio.h>
#include <string.h>char s1[] = "abcdefg", s2[] = "abcdfgh";int main(){int n = memcmp(s1, s2, sizeof(s1));if ( n > 0 ){printf ("'%s' is greater.", s1);}else if( n == 0 ){printf ("'%s' is the same as '%s'.", s1, s2);}else{printf ("'%s' is greater.", s2);}return 0;
}

memcpy

  • 原型:void * memcpy ( void * destination, const void * source, size_t num );

  • 说明:从 source 指定的内存块中复制 num 个字节到 destination 指定的内存块中。

  • 返回值:返回 destination

  • 警告:复制字符串时,它只负责进行复制 num 个字节,不会检查 source 中的 NULL 指针。

  • 实例:

#include <stdio.h>
#include <string.h>int a = 10, b = 0;
char s1[] = "abcdefg", s2[100];int main(){memcpy(&b, &a, sizeof(a));memcpy(s2, s1, strlen(s1) + 1);printf ("b is %d, s2 is '%s'.\n", b, s2);return 0;
}

memmove

  • 原型:void * memmove ( void * destination, const void * source, size_t num );

  • 说明:从 source 指定的内存块中移动 num 个字节到 destination 指定的内存块中。

  • 返回值:返回 destination

  • 警告:复制字符串时,它只负责进行复制 num 个字节,不会检查 source 中的 NULL 指针。

  • 实例:

//去掉了字符串前面的 4 个空格。
#include <stdio.h>
#include <string.h>char s[] = "    too space";int main(){memcpy(s, s+4, strlen(s+4)+1);printf ("s is '%s'.",s);return 0;
}

memset

  • 原型:void * memset ( void * ptr, int value, size_t num );

  • 说明:将 value无符号字节方式填充 ptr 所指的内存块,填充长度为 num 个字节。

  • 返回值:返回 ptr.

  • 实例:

#include <stdio.h>
#include <string.h>char str[] = "hello world!";
int a[100];int main(){memset(str, '-', strlen(str));puts(str);memset(a, 1, sizeof(int) * 100);printf("%d", a[1]);     // 实际为 0x01010101return 0;
}

strcat

  • 原型:char * strcat ( char * destination, const char * source );

  • 说明:将 source 中的内容追加到 destination 中。

  • 返回值:返回 destination

  • 实例:

#include <stdio.h>
#include <string.h>char s1[] = "hello ", s2[] = "world!";int main(){strcat(s1,s2);puts(s1);return 0;
}

strchr

  • 原型:const char * strchr ( const char * str, int character );
    char * strchr ( char * str, int character );

  • 说明:返回 str 中的 character 出现的第一个位置的指针。

  • 返回值:如果找到,返回 str 中的 character 出现的第一个位置的指针;否则返回 NULL

  • 实例:

#include <stdio.h>
#include <string.h>char str[] = "hello world!", ch = 'o';int main(){char *pch = strchr(str, ch);if ( pch != NULL){printf (" '%c' is found at %d.\n", ch, pch - str);}else{printf ("'%c' is not found.\n", ch);}return 0;
}

strcmp

  • 原型:int strcmp ( const char * str1, const char * str2 );

  • 说明:比较字符串 str1str2 的字典序大小(ASCII)。

  • 返回值:

    返回值比较的为指针所指向的内容
    < 0str1 < str2
    0str1 == str2
    > 0str1 > str2
  • 实例:

#include <stdio.h>
#include <string.h>char s1[] = "abcdefg", s2[] = "abcdfgh";int main(){int n = strcmp(s1, s2);if ( n > 0 ){printf ("\"%s\" is greater.", s1);}else if( n == 0 ){printf ("\"%s\" is the same as \"%s\".", s1, s2);}else{printf ("\"%s\" is greater.", s2);}return 0;
}

strcoll

  • 原型:int strcoll ( const char * str1, const char * str2 );

  • 说明:默认情况下(LC_COLLATE 为 “POSIX” 或 “C” )和 strcmp 一样根据 ASCII 比较字符串大小。对于设置了 LC_COLLATE 语言环境的情况下,则根据 LC_COLLATE 设置的语言排序方式进行比较。例如:汉字,根据拼音进行比较。

  • 返回值:

    返回值比较的为指针所指向的内容
    < 0str1 < str2
    0str1 == str2
    > 0str1 > str2
  • 实例:用法同 strcmp 一样,判断规则由 LC_COLLATE 决定。

strcpy

  • 原型:char * strcpy ( char * destination, const char * source );

  • 说明:将 source 的内容复制给 destination,需要保证 destination 足够容纳 source 的内容。

  • 返回值:返回 destination

  • 实例:

#include <stdio.h>
#include <string.h>char s1[] = "abcdefg", s2[100];int main(){strcpy(s2, s1);printf ("s2 is '%s'.", s2);return 0;
}

strcspn

  • 原型:size_t strcspn ( const char * str1, const char * str2 );

  • 说明:返回 str1 中出现的第一个属于 str2 的字符的位置。

  • 返回值:如果找到返回字符位置,否则返回字符串长度。

  • 实例:

#include <stdio.h>
#include <string.h>int main(){int pos = strcspn("qwert1234des","0123456789");printf("%d", pos);return 0;
}

strerror

  • 原型:char * strerror ( int errnum );

  • 说明:给出错误代码 errnum 的描述内容。

  • 返回值:返回描述错误内容的字符串指针。

  • 实例:

#include <stdio.h>
#include <string.h>
#include <errno.h>int main(){FILE *f = fopen("unexist.file", "r");if( f == NULL ){printf ("Error: %s\n",strerror(errno));}return 0;
}

strlen

  • 原型:size_t strlen ( const char * str );

  • 说明:返回字符串 str 的长度。

  • 返回值:返回字符串 str 的长度。

  • 实例:

#include <stdio.h>
#include <string.h>int main(){char a[] = "hello world!";printf("%d", strlen(a));return 0;
}

strncat

  • 原型:char * strncat ( char * destination, const char * source, size_t num );

  • 说明:将 source 中的前 num 个字符串追加到 destination 后。

  • 返回值:返回追加后的 destination 指针。

  • 实例:

#include <stdio.h>
#include <string.h>char s1[] = "hello ", s2[] = "world! -----";int main(){strncat(s1, s2, 6);puts(s1);return 0;
}

strncmp

  • 原型:int strncmp ( const char * str1, const char * str2, size_t num );

  • 说明:比较 str1 中的前 num 个字符和 str2 中 的前 num 个字符的大小。

  • 返回值:

    返回值比较的为指针所指向的内容
    < 0str1 < str2
    0str1 == str2
    > 0str1 > str2
  • 实例:

#include <stdio.h>
#include <string.h>char s1[] = "abcdfgh", s2[] = "abcdefg";int main(){int n = strncmp(s1, s2, 4);if ( n > 0 ){printf ("\"%s\" is greater in the first 4.", s1);}else if( n == 0 ){printf ("\"%s\" is the same as \"%s\" in the first 4.", s1, s2);}else{printf ("\"%s\" is greater in the first 4.", s2);}return 0;
}

strncpy

  • 原型:char * strncpy ( char * destination, const char * source, size_t num );

  • 说明:将 source 中的前 num 个字符复制给 destination如果 source 的长度大于 num,不会自动追加 \0。若小于,则会填充\0,直到长度为 num

  • 返回值:返回 destination 的指针。

  • 实例:

#include <stdio.h>
#include <string.h>int main(){char a[1000], b[1000] = "hello world!";strncpy(a, b, 5);       //不会自动补 NULLa[5] = '\0';puts(a);return 0;
}

strpbrk

  • 原型:const char * strpbrk ( const char * str1, const char * str2 );
    char * strpbrk ( char * str1, const char * str2 );

  • 说明:查找字符串 str1 中第一个出现的属于字符串 str2 中的任意字符的指针。

  • 返回值:返回字符串 str1 中第一个出现的属于字符串 str2 中的任意字符的指针。若没找到,返回 NULL

  • 实例:

#include <stdio.h>
#include <string.h>int main(){char a[] = "This is a test.", b[] = "aeiou";char *pch  = strpbrk(a, b);printf("%d", pch - a);return 0;
}

strrchr

  • 原型:const char * strrchr ( const char * str, int character );
    char * strrchr ( char * str, int character );

  • 说明:在字符串中 str 查找最后一个 character 的指针位置。

  • 返回值:如果找到,在字符串中 str 查找最后一个 character 的指针位置。否则返回 NULL

  • 实例:

#include <stdio.h>
#include <string.h>char str[] = "hello world!", ch = 'o';int main(){char *pch = strrchr(str, ch);if ( pch != NULL ){printf ("'%c' is found at %d.\n", ch, pch - str);}else{printf ("'%c' is not found.\n", ch);}return 0;
}

strspn

  • 原型:size_t strspn ( const char * str1, const char * str2 );

  • 说明: 计算 str1 字符串从开头开始的连续字符,且这些字符都完全是 str2 所指字符串中的字符。

  • 返回值:返回字符的个数。

  • 实例:

#include <stdio.h>
#include <string.h>int main(){char a[] = "aaaaauuuuuxxxsada", b[] = "aeiou";int n = strspn(a, b);printf("%d", n);    //输出为10,满足条件的字符串为aaaaauuuuu。return 0;
}

strstr

  • 原型:const char * strstr ( const char * str1, const char * str2 )
    char * strstr ( char * str1, const char * str2 )

  • 功能:查找字符串 str1 中首次出现字符串 str2 的位置。

  • 说明:返回 str1 中首次出现 str2 的位置的指针,如果 str1 中不存在 str2 则返回 NULL

  • 实例:

#include <stdio.h>
#include <string.h>int main(){char a[] = "hello world!", b[] = "world";char *pch = strstr(a, b);printf("%d", pch - a);return 0;
}

strtok

  • 原型:char * strtok ( char * str, const char * delimiters );

  • 说明:根据 delimiters 指定的内容进行分割。第一次需传入待分割的字符串 str 指针,之后的调用传入 NULL 即可。

  • 返回值:返回指向分割后相应的片段的指针。

  • 实例:

#include <stdio.h>
#include <string.h>char str[] ="- This is a sample string.";int main (){char *pch = strtok(str, " .-,");while( pch != NULL){printf("%s\n", pch);pch = strtok(NULL, " .-,");}return 0;
}

strxfrm

  • 原型:size_t strxfrm ( char * destination, const char * source, size_t num );

  • 说明:根据当前环境(由LC_COLLATE所指定)转化 source 字符串,并将前 num 个字符复制给 destination

  • 返回值:返回转换后的字符串的长度。


http://www.ppmy.cn/news/749274.html

相关文章

C语言字符串string.h详解

本文已整合到C语言标准库深度解读 文章目录 查询函数比较函数复制和追加本地函数 为了看上去规整简洁&#xff0c;令 #define cSTR const char *str #define vSTR const void *str由于字符串自身存在终止符\0&#xff0c;所以下面所有提及对字符串前n个字符的操作&#xff0c…

cdn刷新api_xổ số miền nam thứ 7 hàng tuần

đồng thời đẩy mạnh truyền thng trn knh fanpage发展目REIT2014年,新一代的全基因组数据研究证实,现代波利尼西亚人的基因与欧洲、美洲以及澳大利亚等民族的混合程度,都远远低于中国台湾的原住民。 hiệu quả cng tc kiểm tra1.4385淘气bao gồm cả hai quần đ…

c语言的.h文件怎么写,c语言自己写一个.h的头文件

首先放上三段简单的源码 main.c 里面的内容 #include"stdio.h" #include "lib.h" int main(){ int a,b,c; printf("请输入a&#xff1a;"); scanf("%d",&a); printf("\n请输入b&#xff1a;"); scanf("%d",&a…

编程实现计算n!,键盘输入n

#include<stdio.h> int main() { int n; printf("请输入n:"); scanf("%d",&n); int i1,mul1; do { mulmul*i; i; }while(i<n); printf("%d\n",mul); return 0; }

C语言求N阶乘的方法

1.用for循环&#xff1a; #include<stdio.h> main&#xff08;&#xff09; { int n,i,x&#xff1b; printf ("in put a num : "); scanf ("%d",&n); if (n<0) printf ("data error! \n"); if(n0) printf ("0!" ,1); el…

C语言windows.h库的常用函数(三)

SetCursorPos函数 用途 SetCursorPos函数是windows.h库中用来设置指针位置的函数&#xff0c;使用该函数鼠标指针将会直接跳至指定坐标位置 参数 SetCursorPos函数拥有x和y两个整型参数&#xff0c;作为鼠标指针的坐标位置&#xff08;其中0,0坐标对应屏幕左上角&#xff0…

常用H桥电机驱动模块L298N原理及应用

什么是H桥&#xff1f; H桥是一个比较简单的电路&#xff0c;通常它会包含四个独立控制的开关元器件&#xff08;例如MOS-FET&#xff09;,它们通常用于驱动电流较大的负载&#xff0c;比如电机&#xff0c;至于为什么要叫H桥&#xff08;H-Bridge&#xff09;&#xff0c;因为…

【C语言】求N的阶乘

求N的阶乘 //输入一个数 n &#xff0c;求n! #include "stdio.h" int main(){int n,i; double l 1; //提高精度printf("Enter N:");scanf("%d",&n);for(i n; i > 1;i--) l * i; //计算N!printf("%d!%lf",n,l);//输出N!retu…