C中字符串操作函数有哪些?

在C语言中,字符串操作函数主要用于处理和操作字符串,这些函数大多定义在`<string.h>`头文件中。以下是C语言中常用的字符串操作函数及其详细说明和示例:

### 1. `strcpy` 函数
**功能**:将一个字符串复制到另一个字符串中,包括终止的空字符'\0'。
**原型**:`char*strcpy(char *dest, const char*src);`
**参数**:
- `dest`:目标字符串。
- `src`:源字符串。
**返回值**:指向目标字符串的指针。
**示例**:
```c
#include <stdio.h>
#include <string.h>

int main() {
    char src[] = "Hello, World!";
    char dest[50];
    strcpy(dest, src);
    printf("Copied string: %s\n", dest);
    return 0;
}
```

### 2. `strcat` 函数
**功能**:将一个字符串连接到另一个字符串的末尾,同样包括终止的空字符'\0'。
**原型**:`char*strcat(char *dest, const char*src);`
**参数**:
- `dest`:目标字符串。
- `src`:源字符串。
**返回值**:指向目标字符串的指针。
**示例**:
```c
#include <stdio.h>
#include <string.h>

int main() {
    char dest[50] = "Hello, ";
    char src[] = "World!";
    strcat(dest, src);
    printf("Concatenated string: %s\n", dest);
    return 0;
}
```

### 3. `strlen` 函数
**功能**:计算字符串的长度,不包括终止的空字符。
**原型**:`size_t strlen(const char*str);`
**参数**:
- `str`:要计算长度的字符串。
**返回值**:字符串的长度。
**示例**:
```c
#include <stdio.h>
#include <string.h>

int main() {
    char str[] = "Hello, World!";
    size_t length = strlen(str);
    printf("Length of string: %zu\n", length);
    return 0;
}
```

### 4. `strcmp` 函数
**功能**:比较两个字符串,逐个字符比较直到遇到第一个不同字符或字符串结束符'\0',并区分大小写。
**原型**:`int strcmp(const char*str1, const char *str2);`
**参数**:
- `str1`:第一个字符串。
- `str2`:第二个字符串。
**返回值**:
- 如果`str1`小于`str2`,返回负数。
- 如果`str1`等于`str2`,返回0。
- 如果`str1`大于`str2`,返回正数。
**示例**:
```c
#include <stdio.h>
#include <string.h>

int main() {
    char str1[] = "Hello";
    char str2[] = "World";
    int result = strcmp(str1, str2);
    if (result < 0) {
        printf("str1 is less than str2\n");
    } else if (result > 0) {
        printf("str1 is greater than str2\n");
    } else {
        printf("str1 is equal to str2\n");
    }
    return 0;
}
```

### 5. `strchr` 函数
**功能**:搜索字符在字符串中的首次出现位置。
**原型**:`char*strchr(const char *str, int c);`
**参数**:
- `str`:要搜索的字符串。
- `c`:要查找的字符。
**返回值**:指向字符首次出现位置的指针,如果未找到则返回NULL。
**示例**:
```c
#include <stdio.h>
#include <string.h>

int main() {
    char str[] = "Hello, World!";
    char *ptr = strchr(str, 'W');
    if (ptr != NULL) {
        printf("Character 'W' found at position: %ld\n", ptr - str);
    } else {
        printf("Character 'W' not found\n");
    }
    return 0;
}
```

### 6. `strstr` 函数
**功能**:搜索子字符串在字符串中的首次出现位置。
**原型**:`char*strstr(const char *haystack, const char*needle);`
**参数**:
- `haystack`:要搜索的字符串。
- `needle`:要查找的子字符串。
**返回值**:指向子字符串首次出现位置的指针,如果未找到则返回NULL。
**示例**:
```c
#include <stdio.h>
#include <string.h>

int main() {
    char str[] = "Hello, World!";
    char *ptr = strstr(str, "World");
    if (ptr != NULL) {
        printf("Substring 'World' found at position: %ld\n", ptr - str);
    } else {
        printf("Substring 'World' not found\n");
    }
    return 0;
}
```

### 7. `strncpy` 函数
**功能**:将指定长度的字符串复制到目标字符串中,剩余部分用空字符填充。
**原型**:`char*strncpy(char *dest, const char*src, size_t n);`
**参数**:
- `dest`:目标字符串。
- `src`:源字符串。
- `n`:要复制的最大字符数。
**返回值**:指向目标字符串的指针。
**示例**:
```c
#include <stdio.h>
#include <string.h>

int main() {
    char src[] = "Hello, World!";
    char dest[50];
    strncpy(dest, src, 5);
    dest[5] = '\0'; // 确保字符串以'\0'结尾
    printf("Copied string: %s\n", dest);
    return 0;
}
```

### 8. `strncat` 函数
**功能**:将指定长度的字符串连接到目标字符串的末尾。
**原型**:`char*strncat(char *dest, const char*src, size_t n);`
**参数**:
- `dest`:目标字符串。
- `src`:源字符串。
- `n`:要连接的最大字符数。
**返回值**:指向目标字符串的指针。
**示例**:
```c
#include <stdio.h>
#include <string.h>

int main() {
    char dest[50] = "Hello, ";
    char src[] = "World!";
    strncat(dest, src, 5);
    printf("Concatenated string: %s\n", dest);
    return 0;
}
```

### 9. `strncmp` 函数
**功能**:比较两个字符串的前n个字符。
**原型**:`int strncmp(const char*str1, const char *str2, size_t n);`
**参数**:
- `str1`:第一个字符串。
- `str2`:第二个字符串。
- `n`:要比较的最大字符数。
**返回值**:
- 如果前n个字符相同,返回0。
- 如果前n个字符不同,返回非零值。
**示例**:
```c
#include <stdio.h>
#include <string.h>

int main() {
    char str1[] = "Hello";
    char str2[] = "Hella";
    int result = strncmp(str1, str2, 3);
    if (result == 0) {
        printf("First 3 characters are equal\n");
    } else {
        printf("First 3 characters are not equal\n");
    }
    return 0;
}
```

### 10. `strtok` 函数
**功能**:将字符串根据分隔符分割成一系列标记。
**原型**:`char*strtok(char *str, const char*delim);`
**参数**:
- `str`:要分割的字符串。
- `delim`:分隔符字符串。
**返回值**:指向下一个标记的指针,如果没有更多标记则返回NULL。
**示例**:
```c
#include <stdio.h>
#include <string.h>

int main() {
    char str[] = "Hello,World!This,is,a,test";
    const char delim[] = ",";
    char *token = strtok(str, delim);
    while (token != NULL) {
        printf("Token: %s\n", token);
        token = strtok(NULL, delim);
    }
    return 0;
}
```

### 11. `strerror` 函数
**功能**:将错误编号转换为对应的错误消息字符串,用于调试和错误处理。
**原型**:`char*strerror(int errnum);`
**参数**:
- `errnum`:错误编号。
**返回值**:指向错误消息字符串的指针。
**示例**:
```c
#include <stdio.h>
#include <errno.h>
#include <string.h>

int main() {
    FILE *file = fopen("nonexistentfile.txt", "r");
    if (file == NULL) {
        printf("Error opening file: %s\n", strerror(errno));
    }
    return 0;
}
```

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值