C标准库函数:字符串操作
目录
一、char *strcpy(char *dest, const char *src);
二、char *strncpy(char *dest, const char *src, size_t n);
三、char *strcat(char *dest, const char *src);
四、char *strncat(char *dest, const char *src, size_t n);
(二)自定义字符串处理函数
一、自定义 strcpy函数
二、自定义 `strlen` 函数
在C语言中,字符串是以空字符 `'\0'` 结尾的字符数组。
- C标准库<string.h>提供了一系列用于字符串操作的函数;
- 同时我们也可以自定义字符串处理函数。
下面将从标准库函数 `strcpy` 开始,详细介绍字符串操作,并给出自定义字符串处理函数的示例。
(一)C标准库函数:#include <string.h>
序号 | 函数原型 | 作用 | 注意 |
1 | char *strcpy(char *dest, const char *src); | 将一个字符串复制到另一个字符串中 | strcpy不会检查目标字符串的大小,如果源字符串的长度超过了目标字符串的容量,会导致缓冲区溢出,引发未定义行为。 |
2 | char *strncpy(char *dest, const char *src, size_t n); | 避免 `strcpy` 可能导致的缓冲区溢出问题 | 如果源字符串的长度小于 `n`,`strncpy` 会在复制完源字符串后,继续用空字符填充目标字符串,直到达到 `n` 个字符。如果源字符串的长度大于等于 `n`,则不会自动添加字符串结束符 `'\0'`,需要手动添加。 |
3 | char *strcat(char *dest, const char *src); | 用于将一个字符串追加到另一个字符串的末尾 | `strcat` 同样不会检查目标字符串的大小,如果目标字符串的剩余空间不足以容纳源字符串,会导致缓冲区溢出。 |
4 | char *strncat(char *dest, const char *src, size_t n); | 避免 `strcat` 可能导致的缓冲区溢出问题 | strncat会自动在追加后的字符串末尾添加 `'\0'`,并且不会超过目标字符串的最大容量。 |
一、char *strcpy(char *dest, const char *src);
1. 作用:将一个字符串复制到另一个字符串中
2. 参数:
(1)dest:目标字符串的指针,用于存储复制后的字符串。
(2)src:源字符串的指针,要复制的字符串。
3. 返回值:返回目标字符串的指针 dest。
4. 库:#include <string.h>
5. 示例代码:
#include <stdio.h>
#include <string.h>int main() {char src[] = "Hello, World!";char dest[20];strcpy(dest, src);printf("Copied string: %s\n", dest);return 0;
}
6. 注意事项:strcpy不会检查目标字符串的大小,如果源字符串的长度超过了目标字符串的容量,会导致缓冲区溢出,引发未定义行为。
二、char *strncpy(char *dest, const char *src, size_t n);
1. 作用:为了避免 `strcpy` 可能导致的缓冲区溢出问题
2. 参数:
(1)dest:目标字符串的指针。
(2)src:源字符串的指针。
(3)n:要复制的最大字符数。
3. 返回值:返回目标字符串的指针 dest。
4. 库:#include <string.h>
5. 示例代码:
#include <stdio.h>
#include <string.h>int main() {char src[] = "Hello, World!";char dest[6];strncpy(dest, src, 5);dest[5] = '\0'; // 手动添加字符串结束符printf("Copied string: %s\n", dest);return 0;
}
6. 注意事项:如果源字符串的长度小于 `n`,`strncpy` 会在复制完源字符串后,继续用空字符填充目标字符串,直到达到 `n` 个字符。如果源字符串的长度大于等于 `n`,则不会自动添加字符串结束符 `'\0'`,需要手动添加。
三、char *strcat(char *dest, const char *src);
1. 作用:用于将一个字符串追加到另一个字符串的末尾
2. 参数:
(1)dest:目标字符串的指针,用于存储追加后的字符串。
(2)src:源字符串的指针,要追加的字符串。
3. 返回值:返回目标字符串的指针 dest。
4. 库:#include <string.h>
5. 示例代码:
#include <stdio.h>
#include <string.h>int main() {char dest[20] = "Hello, ";char src[] = "World!";strcat(dest, src);printf("Concatenated string: %s\n", dest);return 0;
}
6. 注意事项:strcat同样不会检查目标字符串的大小,如果目标字符串的剩余空间不足以容纳源字符串,会导致缓冲区溢出。
四、char *strncat(char *dest, const char *src, size_t n);
1. 作用:为了避免 `strcat` 可能导致的缓冲区溢出问题
2. 参数:
(1)dest:目标字符串的指针。
(2)src:源字符串的指针。
(3)n:要追加的最大字符数。
3. 返回值:返回目标字符串的指针 dest。
4. 库:#include <string.h>
5. 示例代码:
#include <stdio.h>
#include <string.h>int main() {char dest[20] = "Hello, ";char src[] = "World!";strncat(dest, src, 3);printf("Concatenated string: %s\n", dest);return 0;
}
6. 注意事项:strncat会自动在追加后的字符串末尾添加 `'\0'`,并且不会超过目标字符串的最大容量。
(二)自定义字符串处理函数
一、自定义 strcpy函数
#include <stdio.h>
// 自定义 strcpy 函数
char *my_strcpy(char *dest, const char *src) {char *original_dest = dest;while (*src != '\0') {*dest = *src;dest++;src++;}*dest = '\0'; // 添加字符串结束符return original_dest;
}int main() {char src[] = "Hello, World!";char dest[20];my_strcpy(dest, src);printf("Copied string: %s\n", dest);return 0;
}
二、自定义 `strlen` 函数
#include <stdio.h>
// 自定义 strlen 函数
size_t my_strlen(const char *str) {size_t len = 0;while (*str != '\0') {len++;str++;}return len;
}int main() {char str[] = "Hello, World!";size_t length = my_strlen(str);printf("Length of the string: %zu\n", length);return 0;
}
通过以上介绍,你可以了解到C语言中标准库提供的字符串操作函数以及如何自定义字符串处理函数。在实际使用中,要注意缓冲区溢出的问题,确保程序的安全性。