ANSI C库有20多个处理字符串的函数,下面的列表总结了其中最常用的一些:
• char *strcpy (char * si, const char * s2);
该函数把s2指向的字符串(包括空字符)复制.到si指向的位置,返回值是sl。
• char *strncpy (char * si, const char * s2,size一t n):
该函数把s2指向的字符串复制到si指向的位置,复制的字符数不超过n个。返回值是si。空字符后 的字符不被复制。如果源字符串的字符数少于n个,在目标字符串中就以空字符填充。如果源字符串的字 符数大于或等于n个,空字符就不被复制。返回值是S1。
• char *strcat (char * si, const char * s2):
s2指向的字符串被复制到si指向字符串的结尾。复制过来的s2所指字符串的第一个字符覆盖了 si所 指字符串结尾的空字符。返回值是si。
• char *strncat (char * si, const char * s2, size_t n);
s2字符串中只有前n个字符被追加到si字符串,复制过来的s2字符串的第一个字符覆盖了 si字符串 结尾的空字符。S2字符串中的空字符及其后的任何字符都不会被复制,并1•追加一个空字符到所得结果后 面。返回值是si。
• int strcmp (const char * si,const char * s2 );
如果si字符串在机器编码顺序中落后f's2字符串,函数的返回值是一个m数;如果两个字符串相同, 返回值是〇;如果第一个字符串在机器编码顺序中先于第二个字符串,返回值是一个负数。
• int strncmp (const char * si, const char * s2,size_t n);
该函数的作用和strcmp ()--样,只是比较n个字符后或者遇见第一个空字符时会停止比较,由二者 中最先被满足的那个条件终止比较过程。
• char *strchr (const char * s, int c):
该函数返回一个指向字符串s中存放字符c的第一个位置的指针(标志结束的空字符是字符串的一部 分,因此也可以搜索到它)。如果没找到该字符,函数就返回空指针。
• char *strpbrk (const char * si. const: char * s2):
该函数返回--个指针\,指向字符串si中存放S2字符串中的任何字符的第一个位置。如果没找到任何 字符,函数就返回空指针\
• char *strrchr (const char * s, int c);
该函数返回一个指针,指向字符串S中字符c最后-次出现的地方(标志结束的空字符是字符串的一 部分,因此也可以搜索到它)。如果没找到该字符,函数就返回空指针。
• char *strstr (const char * si, const char * s2):
该函数返回一个指针,指向si字符串中第一次出现s2字符串的地方。如果在si中没找到s2字符串, 函数就返回空指针。
• size_t strlen (const char * s):
该函数返回s字符串中的字符个数,其中不包括标志结束的空字符。
注意,这些原型使用关键字const来指出哪个字符串是函数不能改动的。例如,考虑下面这个原型:
char *strcpy (char * si,const char * s2);
这意味着82指向一个不可改变的字符串,至少strcpy()函数不会改变它,但是si指向的字符串却可 以改变。这是因为,si是需要改变的目标字符串,而S2是不应当有改变的源字符串。
第5章“运算符、表达式和语句”中已经讨论过,Size_t类型是Size0f运算符返回的任何类型。c规定 sizeof运算符返回-个整数类型,但是没有指定是哪种整数类型。因此Size_t在一个系统上可以是unsigned int类型;在另--个系统上,又可以是unsigned long类型。string.h文件为您的特定系统定义了 sizej,或者 您可以参考其他有该定义的头文件。
前面已经提到过,参考资料5中列出了 string.li系列中所有的函数。除了 ANSI标准要求的那些,很多 C实现还提供了其他一些函数。应该査看您的C实现的文档以了解可以使用哪些函数。
让我们看一下这些函数其中一个的简单使用。前面您己学习了 f评is ()函数。在读取一行输入时,这个函数把换行符存储到目标字符串中。可以使用stehr ()函数来用-十空字符代替这个换行符。首先’使用sttchr () 找到换行符(如果有的话)。如果找到了,函数就返回这个换行符的地址,于是就可以在该地址放一个空字符:
char line[80J; char * find;
fgets (line, 80,stdin):
find = strchr (line,1 \n1): // 查找换行符
if (find) //如果该地址不为NULL,
*find = -\0- //就把一个空字符放在这里
如果strehr ()没有找到换行符,说明fgets ()在行未结束时就达到了大小限制。您可以给if加个else 来处理这种情况。