LinuxC函数之字符串处理函数
字符串处理函数(13, 19)
这些函数的头文件都是string.h
非str前缀的字符串操作
bcmp: 比较内存中的内容, 建议用memcmp()取代
函数定义: int bcmp(const void *s1, const void *s2, int n);
说明: 用来比较s1和s2所指的内存区前n个字节, 若参数n为0, 则返回0. 若参数s1和s2所指的内存完全相同返回0值, 否则返回非0值.
bcopy: 拷贝内存内容, 建议用memcpy()取代
函数定义: void bcopy(const void *src, void *dest, int n);
说明: bcopy()和memcpy()一样都是用来拷贝src所指的内存内容前n个字节到dest所指的地址,
不过, 参数scr和dest在传给函数时位置是相反的.
bzero: 将一段内存内容全清为0, 建议用bzero()取代
函数定义: void bzero(void *s, int n);
说明: bzero()会将参数s所指的内存区域前n个字节, 全部设为0. 相当于调用memset(void *s, 0, size_t n);
ffs: 在一个整型数(2进制表示)中查第一个值为1的位
函数定义: int ffs(int i);
说明: ffs()会由低位至高位, 判断参数i的2进制中每一位, 将最先出现位的值为1的位置返回. 若i为0, 返回0.
应用举例:
#include <stdio.h>
#include <string.h>
int main(void)
{
int num[7] = {0, 1, 2, 3, 4, 5, 8};
int i;
for(i = 0; i < 7; i++)
{
printf("%d: %d\n", num[i], ffs(num[i]));
}
return 0;
}
运行结果:
0: 0  1: 1  2: 2  3: 1  4: 3  5: 1  8: 4
index: 查字符串中第一个出现的指定字符
函数定义: char *index(const char *s, int c);
说明: index()用来出参数s字符串中第一个出现的参数c的地址, 然后将该字符出现的地址返回, 结束符也视为字符串的一部分. 返回值, 如果到指定的字符则返回该字符所在地址, 否则返回0.
rindex: 查字符串中最后一个出现的指定字符
函数定义: char *rindex(const char *s, int c);
说明: rindex()用来出参数s字符串中最后一个出现的参数c的地址, 然后将该字符出现的地址返回, 结束符也视为字符串的一部分. 返回值, 如果到指定的字符则返回该字符所在地址, 否则返回0.
应用举例:
#include <stdio.h>
#include <string.h>
int main(void)
{
const char *s = "1234556554321";
char *p;
printf("%s\n", s);
printf("%s\n", index(s, '5'));
printf("%s\n", rindex(s, '5'));
p = memchr(s, '5', 3);
if(p == NULL)
printf("NULL\n");
else
printf("%s\n", p);
printf("%s\n", memchr(s, '5', 8));
return 0;
}
运行结果:
1234556554321
556554321
54321
NULL
556554321
memchr: 在某一内存范围中一特定字符
函数定义: void *memchr(const void *s, int c, size_t n);
说明: memchr()从头开始搜寻s所指内存的前n个字节, 直到发现第一个值为c的字符, 则返回指向该字符的指针. 如果不到就返回0.
应用举例: 见index和rinedx
memcmp: 比较内存内容
函数定义: int memcmp(const void *s1, const void *s2, size_t n);
说明: memcmp()用来比较s1和s2所指的内存区间前n个字符. 字符串大小的比较是以ASCII表上的顺序来决定, 此顺序亦为字符的值. memcmp()首先将s1第一个字符值减去s2第一个字
符值, 若差值为0则再继续比较下个字符, 若不为0则将等差值返回. 返回值, 若s1和s2相等则返回0, 若s1大于s2则返回大于0的值, 若s1小于s2则返回小于0的值.
应用举例:
#include <stdio.h>字符串复制函数
#include <string.h>
int main(void)
{
const char *s1 = "123asd";
const char *s2 = "123edf";
int nR;
nR = memcmp(s1, s2, sizeof(s1));
if(nR == 0)
printf("0\n");
else if(nR > 1)
printf("1\n");
else
printf("-1\n");
return 0;
}
运行结果: 
-1
memset: 将一段内存空间填入某值
函数定义: void *memset(void *s, int c, size_t n);
说明: memset()会将参数s所指向的内存区域前n个字节以参数c填入, 然后返回指向s的指针. 在编写程序时, 若需要将某一数组初始化, 使用memset(). 返回指向s的指针. 注意, 参数c虽然声明为int, 但必须是unsigned char, 所以范围在0到255之间. 
应用举例:
#include <stdio.h>
#include <string.h>
int main(void)
{
char s[5];
memset(s, 'a', sizeof(s));

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。