strlen
strlen
是 C 语言中的一个字符串处理函数,用于计算一个字符串的长度,即字符串中的字符个数(不包括结尾的空字符 \0
)。
strlen
函数的原型定义在 <string.h>
标准库头文件中:
size_t strlen(const char* str);
参数 str
是一个指向以空字符 \0
结尾的字符串的指针。函数会遍历该字符串,直到遇到 \0
终止符,并返回计数器的值。
下面是一个使用 strlen
函数的示例:
#include <stdio.h>
#include <string.h>
int main() {
const char* str = "Hello, world!";
size_t length = strlen(str);
printf("字符串的长度为:%zu\n", length);
return 0;
}
输出结果为:字符串的长度为:13
请注意,在使用 strlen
函数时,确保所传递的参数是以 \0
结尾的有效字符串,以避免未定义的行为。
strlen
函数返回的类型是 size_t
,它是无符号整数类型,可以存储比 int
类型更大的整数值。
实现及原理
size_t my_strlen(const char* str)
{
size_t count = 0;
while (*str++)
{
count++;
}
return count;
}
int main()
{
char str[] = "abcdef";
int len = my_strlen(str);
printf("%d", len);
return 0;
}
size_t my_strlen(const char* str)
{
if (*str == '\0')
{
return 0;
}
else
{
return 1 + my_strlen(str + 1);
}
}
int main()
{
char str[] = "abcdef";
int len = my_strlen(str);
printf("%d", len);
return 0;
}
strcpy
strcpy是C语言中的一个字符串操作函数,用于将一个字符串拷贝到另一个字符串中。其函数原型如下:
char* strcpy(char* destination, const char* source);
该函数接受两个参数,分别是目标字符串destination和源字符串source。它将源字符串source的内容拷贝到目标字符串destination中,并返回目标字符串的指针。
需要注意的是,如果目标字符串destination不具备足够的空间来容纳源字符串source(包括源字符串的结尾空字符’\0’),会导致内存越界错误。确保destination有足够的空间来存放拷贝后的字符串是非常重要的。
示例用法如下:
#include <stdio.h>
#include <string.h>
int main() {
char source[] = "Hello, World!";
char destination[20];
strcpy(destination, source);
printf("目标字符串: %s\n", destination);
return 0;
}
输出结果为:
目标字符串: Hello, World!
在这个示例中,strcpy函数将source字符串中的内容拷贝到destination字符串中。destination数组有足够的空间来存放source字符串,所以拷贝操作成功。
实现及原理
char* my_strcpy(char* dest, const char* src)
{
char* ret = dest; // 保存目标字符串的起始指针
assert(dest != NULL); // 断言目标字符串指针不为NULL
assert(src != NULL); // 断言源字符串指针不为NULL
while ((*dest++ = *src++))
{
// 逐个字符复制,并判断是否复制完毕
;
}
return ret; // 返回目标字符串的起始指针
}
strcmp
strcmp是C语言中的一个字符串操作函数,用于比较两个字符串的大小。其函数原型如下:
int strcmp(const char* str1, const char* str2);
该函数接受两个参数,分别是待比较的字符串str1和str2。它按字典顺序比较两个字符串,并返回一个整数值,表示它们的大小关系。具体返回值的含义如下:
- 若返回值小于 0:表示str1小于str2;
- 若返回值等于 0:表示str1等于str2;
- 若返回值大于 0:表示str1大于str2。
strcmp函数会逐个比较两个字符串中对应位置上的字符,直到出现比较结果不同的字符,或者其中一个字符串结束为止。需要注意,strcmp函数区分大小写,并基于字符的ASCII码进行比较。
以下是一个示例用法:
#include <stdio.h>
#include <string.h>
int main() {
char str1[] = "apple";
char str2[] = "banana";
int result = strcmp(str1, str2);
if (result < 0) {
printf("str1 小于 str2\n");
} else if (result == 0) {
printf("str1 等于 str2\n");
} else {
printf("str1 大于 str2\n");
}
return 0;
}
输出结果为:
str1 小于 str2
在这个示例中,strcmp函数比较了两个字符串"apple"和"banana",并返回一个小于 0 的值,表示str1小于str2。
使用strcmp函数可以方便地对字符串进行大小比较,例如在排序、查找、判断字符串相等等场景中都可以得到应用。
实现及原理
// 自定义的字符串比较函数
int my_strcmp(const char* str1, const char* str2)
{
int ret = 0;
// 断言字符串指针不为空
assert(str1 != NULL);
assert(str2 != NULL);
// 逐个字符比较,直到出现不同的字符或者到达字符串结尾
while (*str1 == *str2)
{
if (*str1 == '\0')
return 0; // 字符串相等,返回0
str1++;
str2++;
}
return *str1 - *str2; // 返回不同字符的差值
}
strcat
strcat 是 C 语言中的一个字符串操作函数,用于将一个字符串追加到另一个字符串的末尾。具体而言,strcat 函数会将源字符串的内容追加到目标字符串的末尾,并在目标字符串的末尾添加一个字符串结束符 ‘\0’。
其函数原型如下:
char* strcat(char* dest, const char* src);
该函数接受两个参数,分别是目标字符串 dest 和源字符串 src。它会将 src 的内容追加到 dest 的末尾,并返回一个指向目标字符串 dest 的指针。
需要注意的是,目标字符串 dest 必须具有足够的空间来容纳 src 的内容,以及目标字符串自身的内容。否则,可能会导致缓冲区溢出的问题。
以下是一个示例用法:
#include <stdio.h>
#include <string.h>
int main() {
char str1[20] = "Hello";
char str2[] = " World";
strcat(str1, str2);
printf("%s\n", str1); // 输出连接后的字符串 "Hello World"
return 0;
}
在这个示例中,strcat 函数将源字符串 " World" 追加到目标字符串 “Hello” 的末尾,得到一个连接后的字符串 “Hello World”。
strcat 函数的使用场景包括字符串连接、构建输出、字符串拼接等方面。但需要确保目标字符串有足够的空间来容纳源字符串的内容。为了避免缓冲区溢出,也可以使用更加安全的函数 strncat,它可以限制追加的字符个数。
实现及原理
// 自定义的字符串追加函数
char* my_strcat(char* dest, const char* src)
{
char* ret = dest; // 保存目标字符串的起始指针
// 断言字符串指针不为空
assert(dest != NULL && src != NULL);
// 指针移动到目标字符串的末尾
while (*dest)
{
dest++;
}
// 将源字符串的内容逐个追加到目标字符串末尾
while ((*dest++ = *src++))
{
// 追加字符,并判断是否复制完毕
;
}
return ret; // 返回目标字符串的起始指针
}