字符串函数学习

strlen - 计算字符串长度

strlen 函数用于计算字符串的有效长度(不包含字符串结束符 '\0')。

size_t strlen(const char *str);

参数:str 为要计算长度的字符串。
返回值:返回字符串的长度(类型为 size_t,即无符号整数)。

#include <stdio.h>
#include <string.h>

int main() {
    char str[] = "Hello, world!";
    printf("字符串长度: %zu\n", strlen(str));  // 输出:13
    return 0;
}
注意事项:

字符串必须以 '\0' 结尾,否则会导致未定义行为(可能返回随机值)。

返回值为无符号类型,避免与有符号整数直接比较(如 if (strlen(str) < -1) 会出错)。

strcpy - 字符串复制

strcpy 函数用于将一个字符串复制到另一个字符数组中。

c

char* strcpy(char *dest, const char *src);

参数:dest 为目标数组,src 为源字符串。

返回值:返回指向目标数组的指针(即 dest)。

#include <stdio.h>
#include <string.h>

int main() {
    char src[] = "Hello";
    char dest[10];
    strcpy(dest, src);
    printf("复制后的字符串: %s\n", dest);  // 输出:Hello
    return 0;
}
注意事项:

目标数组必须足够大,能容纳源字符串(包括 '\0')。

若目标数组空间不足,会导致缓冲区溢出(如 char dest[3]; strcpy(dest, "Hello");)。

strcat - 字符串拼接

strcat 函数用于将一个字符串追加到另一个字符串的末尾。

char* strcat(char *dest, const char *src);

参数dest 为目标字符串(需已包含 '\0'),src 为要追加的字符串。

返回值:返回指向目标字符串的指针(即 dest)。

#include <stdio.h>
#include <string.h>

int main() {
    char dest[20] = "Hello, ";
    char src[] = "world!";
    strcat(dest, src);
    printf("拼接后的字符串: %s\n", dest);  // 输出:Hello, world!
    return 0;
}
注意事项:

目标数组必须足够大,能容纳原字符串和追加的字符串(包括 '\0')。

目标字符串必须以 '\0' 结尾,否则会导致未定义行为。

strcmp - 字符串比较

strcmp 函数用于按字典序比较两个字符串。

int strcmp(const char *str1, const char *str2);

参数:str1 和 str2 为要比较的两个字符串。

返回值:  若 str1 小于 str2,返回负数(通常为 -1)。

                若 str1 等于 str2,返回 0。

                若 str1 大于 str2,返回正数(通常为 1)。

#include <stdio.h>
#include <string.h>

int main() {
    char str1[] = "apple";
    char str2[] = "banana";
    int result = strcmp(str1, str2);
    
    if (result < 0) {
        printf("'%s' 小于 '%s'\n", str1, str2);
    } else if (result > 0) {
        printf("'%s' 大于 '%s'\n", str1, str2);
    } else {
        printf("两字符串相等\n");
    }
    
    return 0;
}
注意事项:

比较是基于字符的 ASCII 值进行的(如 'A' 的 ASCII 值为 65,'a' 为 97)。

比较会持续到遇到不同字符或 '\0' 为止。

strstr - 子串查找

strstr 函数用于在一个字符串中查找另一个子串的首次出现位置。

char* strstr(const char *str, const char *substr);

参数:str 为要搜索的字符串,substr 为要查找的子串。

返回值:        若找到子串,返回指向该子串的指针。

                       若未找到,返回 NULL。

#include <stdio.h>
#include <string.h>

int main() {
    char str[] = "Hello, world!";
    char substr[] = "world";
    char* result = strstr(str, substr);
    
    if (result != NULL) {
        printf("子串位置: %ld\n", result - str);  // 输出:7(从0开始的索引)
    } else {
        printf("未找到子串\n");
    }
    
    return 0;
}
注意事项:

若子串为空字符串(""),函数返回原字符串 str。

搜索区分大小写(如 "WORLD" 与 "world" 不同)。

strtok - 字符串分割

strtok 函数用于将字符串按指定分隔符分割成多个子串(token)

char* strtok(char *str, const char *delim);

参数:

str:首次调用时传入要分割的字符串,后续调用应传入 NULL。

delim:包含所有分隔符的字符串(如 ",.-" 表示逗号、点和连字符均可作为分隔符)。

返回值:

成功时返回指向下一个 token 的指针。

无更多 token 时返回 NULL。

#include <stdio.h>
#include <string.h>

int main() {
    char str[] = "Hello,world!-test";
    const char* delim = ",!-";
    char* token = strtok(str, delim);
    
    while (token != NULL) {
        printf("Token: %s\n", token);
        token = strtok(NULL, delim);  // 继续处理剩余部分
    }
    
    return 0;
}

运行结果: 

Token: Hello
Token: world
Token: test
注意事项:

strtok 会修改原字符串(将找到的分隔符替换为 '\0')。

函数使用静态变量记录当前位置,不支持多线程操作(可考虑使用 strtok_r 或 strtok_s 替代)。

strerror - 获取错误信息

strerror - 获取错误信息

strerror 函数用于将错误码(errno)转换为对应的错误信息字符串。

char* strerror(int errnum);

参数:errnum 为错误码(通常是全局变量 errno 的值)。

返回值:返回指向错误信息字符串的指针。

#include <stdio.h>
#include <string.h>
#include <errno.h>

int main() {
    FILE* file = fopen("nonexistent.txt", "r");
    if (file == NULL) {
        printf("打开文件失败: %s\n", strerror(errno));
        // 输出:打开文件失败: No such file or directory
    }
    return 0;
}
注意事项:

使用前需包含 <errno.h> 和 <string.h>。

返回的字符串为静态分配,无需手动释放。

错误信息可能因系统环境而异(如 Linux 和 Windows 的错误描述不同)。

    评论
    添加红包

    请填写红包祝福语或标题

    红包个数最小为10个

    红包金额最低5元

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

    抵扣说明:

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

    余额充值