C 字符串基础
C 语言中的字符串本质是以空字符 \0
结尾的字符数组。字符串的声明和初始化可以通过以下方式实现:
char str1[] = "Hello"; // 自动添加 \0
char str2[6] = {'H', 'e', 'l', 'l', 'o', '\0'}; // 手动添加 \0
char str3[10]; // 未初始化的字符数组
字符串输入与输出
使用标准库函数可以方便地进行字符串的输入和输出操作:
#include <stdio.h>
int main() {
char name[50];
printf("Enter your name: ");
scanf("%49s", name); // 限制输入长度防止溢出
printf("Hello, %s!\n", name);
return 0;
}
常用字符串处理函数
C 标准库 <string.h>
提供了丰富的字符串处理函数:
#include <stdio.h>
#include <string.h>
int main() {
char str1[20] = "Hello";
char str2[20] = "World";
char str3[20];
// 字符串复制
strcpy(str3, str1);
printf("str3 after copy: %s\n", str3);
// 字符串连接
strcat(str1, " ");
strcat(str1, str2);
printf("str1 after concatenation: %s\n", str1);
// 字符串长度
printf("Length of str1: %zu\n", strlen(str1));
// 字符串比较
if (strcmp(str1, str2) == 0) {
printf("Strings are equal\n");
} else {
printf("Strings are different\n");
}
return 0;
}
字符串与指针
字符串与指针密切相关,字符串名称本身就是指向第一个字符的指针:
#include <stdio.h>
int main() {
char str[] = "Pointer";
char *ptr = str;
while (*ptr != '\0') {
printf("%c ", *ptr);
ptr++;
}
printf("\n");
return 0;
}
字符串数组
处理多个字符串时可以使用二维字符数组或指针数组:
#include <stdio.h>
int main() {
// 二维字符数组
char names1[3][10] = {"Alice", "Bob", "Charlie"};
// 指针数组
char *names2[] = {"David", "Eve", "Frank"};
for (int i = 0; i < 3; i++) {
printf("%s\t%s\n", names1[i], names2[i]);
}
return 0;
}
字符串操作示例
字符串分割是一个常见操作,可以使用 strtok
函数实现:
#include <stdio.h>
#include <string.h>
int main() {
char str[] = "apple,orange,banana";
char *token = strtok(str, ",");
while (token != NULL) {
printf("%s\n", token);
token = strtok(NULL, ",");
}
return 0;
}
安全字符串处理
为防止缓冲区溢出,推荐使用安全版本的字符串函数:
#include <stdio.h>
#include <string.h>
int main() {
char dest[10];
char src[] = "This string is too long";
// 安全的字符串复制
strncpy(dest, src, sizeof(dest) - 1);
dest[sizeof(dest) - 1] = '\0';
printf("Truncated string: %s\n", dest);
return 0;
}
自定义字符串函数
实现自定义的字符串处理函数可以加深对字符串的理解:
#include <stdio.h>
size_t my_strlen(const char *str) {
size_t len = 0;
while (*str++) len++;
return len;
}
int main() {
char test[] = "Length test";
printf("Length: %zu\n", my_strlen(test));
return 0;
}
性能注意事项
字符串操作在 C 语言中需要特别注意性能和内存问题:
- 避免频繁的字符串连接操作
- 预分配足够的内存空间
- 考虑使用更高效的算法处理大量字符串
以上代码示例涵盖了 C 字符串的主要概念和操作,从基础用法到高级技巧,为开发者提供了全面的参考。