今天这篇文章重点介绍处理字符和字符串的库函数的使用和注意事项
为了方便检索,这里放一个目录
目录
前言
C语言中对字符和字符串的处理很是频繁,但是C语言本身是没有字符串类型的,字符串通常放在 常量字符串中或者字符数组里字符串常量适用于那些对它不做修改的字符串函数.
strlen
size_t strlen ( const char * str );
str:指向要测量长度的字符串的指针
strlen 是 C 语言标准库中的一个函数,用于计算字符串的长度。具体来说,它返回的是字符串中字符的数量,但不包括结尾的空字符 \0。
这里要注意字符串已经 '\0' 作为结束标志,strlen函数返回的是在字符串中 '\0' 前面出现的字符个数(不包含 '\0' )。
引用的参数指向的字符串必须要以 '\0' 结束。
注意函数的返回值为size_t,是无符号的。
这里放一下strlen函数比较两个字符串的大小代码
#include <stdio.h>
int main()
{
const char*str1 = "abcdef";
const char*str2 = "bbb";
if(strlen(str2)-strlen(str1)>0)
{
printf("str2>str1\n");
}
else
{
printf("srt1>str2\n");
}
return 0;
}
这里的size_t是一种无符号的整型,具体使用放在下面
#include <stdio.h>
#include <string.h>
int main() {
char str[] = "Hello, World!";
size_t length = strlen(str);
printf("Length of the string: %zu\n", length); // 输出: Length of the string: 13
return 0;
}
其中%zu 是 printf 中用于格式化输出 size_t 类型的占位符。
strcpy
char* strcpy(char * destination, const char * source );
strcpy
是 C 语言标准库中的一个函数,用于将一个字符串复制到另一个字符串。具体来说,它将源字符串(包括结尾的空字符 \0
)复制到目标字符串中。
dest:指向目标字符串的指针,即要将源字符串复制到的位置。
source:指向源字符串的指针,即要被复制的字符串。
返回值是返回指向目标字符串 dest 的指针。
注意要点:源字符串必须以 '\0' 结束。
会将源字符串中的 '\0' 拷贝到目标空间。
目标空间必须足够大,以确保能存放源字符串。
目标空间必须可变。
试着学会模拟实现。
strcat
char * strcat ( char * destination, const char * source );
strcat 是 C 语言标准库中的一个函数,用于将一个字符串追加到另一个字符串的末尾。具体来说,它将源字符串(包括结尾的空字符 \0)追加到目标字符串的末尾。
dest:指向目标字符串的指针,即要将源字符串追加到的位置。
source:指向源字符串的指针,即要被追加的字符串。
返回照样是一个指针。
放一下使用代码
#include <stdio.h>
#include <string.h>
int main() {
char dest[50] = "Hello, ";
const char *src = "World!";
strcat(dest, src);
printf("Result: %s\n", dest); // 输出: Result: Hello, World!
return 0;
}
使用注意事项:源字符串必须以 '\0' 结束。
目标空间必须有足够的大,能容纳下源字符串的内容。
目标空间必须可修改。
字符串自己给自己追加,如何?
首先就是内存重叠:strcat 在追加字符串时,会从目标字符串的末尾开始写入新的字符。如果源字符串和目标字符串是同一个字符串,strcat 会在读取和写入过程中覆盖部分或全部源字符串的内容,导致数据损坏。
再是未定义行为:C 标准下没有定义这种情况下 strcat 的行为,因此结果是不知道的,可能会导致程序崩溃或其他错误。
如果你非要自己加自己不可,那么就可以创建一个变量地址,我们叫做临时缓冲区
#include <stdio.h>
#include <string.h>
int main() {
char str[50] = "Hello, ";
char temp[50];
// 复制原始字符串到临时缓冲区
strcpy(temp, str);
// 将临时缓冲区中的内容追加到原始字符串
strcat(str, temp);
printf("Result: %s\n", str); // 输出: Result: Hello, Hello,
return 0;
}
这样就大功告成了。
strcmp
int strcmp ( const char * str1, const char * str2 );
strcmp 是 C 语言标准库中的一个函数,用于比较两个字符串。它逐字符比较两个字符串,直到发现不匹配的字符或遇到字符串结尾的空字符 \0。strcmp 返回一个整数值,表示两个字符串的比较结果。
如果
第一个字符串大于第二个字符串,则返回大于0的数字
第一个字符串等于第二个字符串,则返回0
第一个字符串小于第二个字符串,则返回小于0的数字
#include <stdio.h>
#include <string.h>
int main() {
const char *str1 = "apple";
const char *str2 = "banana";
const char *str3 = "apple";
int result1 = strcmp(str1, str2);
int result2 = strcmp(str1, str3);
int result3 = strcmp(str2, str1);
printf("strcmp(str1, str2): %d\n", result1); // 输出: strcmp(str1, str2): -1
printf("strcmp(str1, str3): %d\n", result2); // 输出: strcmp(str1, str3): 0
printf("strcmp(str2, str1): %d\n", result3); // 输出: strcmp(str2, str1): 1
return 0;
}
感谢观看,下一篇见