字符串常用函数

char * gets (char * buffer);  

// 如果一切都顺利,它返回的是读入字符串的地址;如果出错或如果gets()遇到文件结尾,他就返回一个空(或0)地址,这个空地址被称为空指针

gets不检查预留存储区是否能够容纳实际输入的数据,多出来的字符简单的溢出到相邻的内存区。

 

char * fgets (char * buf, int bufsize, FILE * stream);

fgets函数改进了上面的不安全问题,bufsize指定最大读入字符数。读取最多n-1个字符或者读完一个换行符为止,由这二者中最先满足的那个来结束输入

如果fgets读取到换行符,就会把它存到字符串里,而不是像gets()那样丢弃它

 

puts显示字符串时自动在其后添加一个换行符。

 

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

src和dest所指内存区域不可以重叠且dest必须有足够的空间来容纳原始字符串(不包括空字符)、增加的最多n个字符和结束的空字符

    strlen(src) < n, 复制源字符串前strlen(src)个字符到目标数组中, 并且自动设置第strlen(src) + 1 个字符为''\0"

    strlen(src) >= n,复制源字符串前n个字符到目标数组中, 并且自动设置第n+ 1 个字符为''\0"

 

int strcmp(const char *s1,const char * s2);

按字符串在机器编码顺序中顺序比较

当s1<s2时,返回为负数
当s1=s2时,返回值= 0
当s1>s2时,返回正数

通常我们不会在意返回的确切值,只想知道结果为0还是非0(也就是看看它们是否匹配);或者我们是把字符串按字母表顺序排序,希望知道比较结果是正数、负数还是0

 

 char *strcpy(char* dest, const char *src);

 第一个参数不需要指向数组的开始,这样就可以只复制数组的一部分

 

char strncpy (char * dest, char * src, size_t n);

strcpy和gets函数同样都有一个问题,那就是都不检查目标字符串是否容纳得下源字符串。

复制字符串使用strncpy比较安全。它需要第三个参数来指明最大可复制的字符数。

函数调用strncpy(dest, src, n) 从src把n个字符(或空字符之前的字符,由二者中最先满足的那个决定何时终止)复制到dest

 

strcpy与strncpy区别总结:

  strcpy在源数组中找到'\0',将'\0'连同'\0'之前的字符复制到目标字符数组中,目标数组长度小于源数组则发生溢出(注意: 目标数组可能不从第一个元素地址开始,则目标数组长度大于等于源数组也可能发生溢出 )

  strncpy从源数组中找出前n个字符,复制到目标数组

    若源数组前n个字符中不包含'\0', 则函数工作到此结束,函数不会自动设置'\0', 需要手动设置字符串结束字符'\0';

    若源数组前n个字符中包含了'\0', 则复制到目标数组的前n个字符中第一个'\0'字符到第n个字符都会被设置为'\0', 函数工作到此结束, 而目标数组第n个字符以后的字符不作改变(如果源字符串的字符数少于n个,在目标字符串中就以空字符填充)

        

 

strlen

strcat    =====    strncat

strcmp   =====    strncmp

strcpy    =====    strncpy

 

char * strpbrk (const char * object, const char * target);

该函数返回一个指针,指向字符串object中存放target字符串中的任何字符的第一个位置,如果没找到任何字符,函数就返回空指针

 

char * strrchr (const char * object, int ch);

该函数返回一个指针, 指向字符串object中字符ch最后一次出现的地方(标志结束的空字符是字符串的一部分,因此也可以搜索到它)。如 果没找到该字符,函数就返回空指针

 

long strtol (const char * nptr, char ** end ptr, int base);

strtol函数把一个字符串转换为long型值,在这里,nptr是一个指向您希望转换的字符串的指针,endptr是指向标志输入数字的结束字符的指针的地址,base是数字的基数

strtol     ------>>>   long

strtoul   ------>>>   unsigned long

strtod    ------>>>   double

 

posted @ 2014-09-02 17:22  挨踢淫才  阅读(307)  评论(0编辑  收藏  举报