c标准库 string.h

2018-05-17 11:57:22

库变量
size_t 无符号整形,通常为sizeof,strlen的结果。

库宏命令
NULL 空指针常量。

库函数

size_t strlen(const char *s);
计算字符串长度。

char *strcpy(char *dest, const char *src);
连同src的末尾空字符\0也会复制过去,一定要确保dest空间足够大。

char *strncpy(char *dest, const char *src, size_t n);
复制src上的n个字符到dest,如果src中1-n之间都没有空字符\0,就不会再dest上加上\0,如果有\0,则在\0出现的位置到n之间都会置为\0。

char tmp[10] = "abcdedg";
char *aa = "1234";
strncpy(tmp, aa, 7);
printf("%s\n", tmp);    //1234\0\0\0


void *memcpy(void *dest, const void *src, size_t n);
从src内存中复制n个字节到dest。

void bzero(void *s, int n);
s的前n个字符置0。

void *memset(void *buffer, int c, int count);
buffer的前count个字节置为字节c(c会转化成unsigned char)。

char *strdup(char *s);
由malloc分配内存并复制s,返回指向新字符串的指针,内存必须手动释放 。

char *strndup(const char *s, size_t n);
由malloc分配内存并复制s的n个字符,并加上\0,返回指向新字符串的指针,内存必须手动释放。

int memcmp(void *buf1, void *buf2, unsigned int count);
比较内存buf1,buf2中count个字节,当buf1<buf2时,返回值<0 //当buf1=buf2时,返回值=0 //当buf1>buf2时,返回值>0。

int stricmp(char *s1,char * s2);
不区分大小写。

int strcmp(char *s1,char * s2);
当s1<s2时,返回值<0 当s1=s2时,返回值=0 当s1>s2时,返回值>0。

int strncmp(char *s1,char * s2,int n); 
int strnicmp(char *s1,char * s2,int n);

同上,只是比较前n个字符,i代表不区分大小写。

char *strncat(char *dest,char *src,int n);
char *strcat(char *dest,char *src);

把src所指字符串添加到dest结尾处(覆盖dest结尾处的'\0')并添加'\0'。src和dest所指内存区域不可以重叠且dest必须有足够的空间来容纳src的字符串。返回指向dest的指针。

char *strchr(char *s,char c);
查找字符串s中首次出现字符c的位置,返回首次出现c的位置的指针,如果s中不存在c则返回NULL 。

void *memchr(const void *str, int c, size_t n);
从内存str的前n个字符中查找字符c,其他同上 。

char *strrchr(const char *str, int c);
查找字符串s中最后一次出现字符c的位置。

char *strstr(char *haystack, char *needle);
从字符串haystack中寻找needle第一次出现的位置(不比较结束符NULL)。
返回指向第一次出现needle位置的指针,如果没找到则返回NULL。

char src[100] = "my website is http://www.freecls.com";
char *tmp = strstr(src, "web");
//website is http://www.freecls.com
printf("%s\n", tmp);


void perror(const char *msg);
此函数会打印出字符串msg紧跟与当前errno值对应的错误描述。  例子参照 linux系统调用及错误处理

char *strerror(int errnum);
该函数会根据errnum错误号返回错误描述字符串,由于返回的字符串是静态分配的,这就意味着后续调用strerror()可能会覆盖之前的字符串,所以如果该错误描述后续还要用到,建议复制一个副本。例子参照 linux系统调用及错误处理  

char *strtok(char *s, char *delim);
分解字符串为一组标记串。s为要分解的字符串,delim为分隔符字符串。 首次调用时,s必须指向要分解的字符串,随后调用要把s设成NULL。 strtok在s中查找包含在delim中的字符并用NULL('\0')来替换,直到找遍整个字符串。 返回指向下一个标记串。当没有标记串时则返回空字符NULL。

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

int main () {
   FILE *fp;

   fp = fopen("file.txt","r");
   if( fp == NULL ) {
      printf("Error: %s\n", strerror(errno));
   }
   
   return(0);
}


总结

1.本文对常用的字符串库做了简单的介绍,如果有疑问可以给我留言
2.gcc4.8,运行环境centos7 64位
3.原文地址http://www.freecls.com/a/2712/27

©著作权归作者所有
收藏
推荐阅读
简介
天降大任于斯人也,必先苦其心志。