s开头函数大全:https://blog.csdn.net/u012855229/article/details/130451883

字符串拷贝

字符串拼接

获取字符串的长度

https://www.jb51.net/article/217872.htm
https://blog.csdn.net/xuechanba/article/details/118862663

注意:\0如果后面再接数字,可能就是unicode编码,此时的\0与后面的数字为一个整体,不被识别为结束符。

比较项 sizeof strlen
性质 运算符 函数
'\0'影响 会将空字符\0计算在内
计算到字符串最后一个空字符\0并结束
不会将空字符\0计算在内
如果遇到第一个空字符\0的话就会停止并计算遇到的第一个空字符\0前面的长度。
对于{'a','b','c'}这样没有加'\0'的字符串,读出来的是个随机值
参数 可以用类型作参数 只能是char类型
指针 无法求出指针指向的字符串长度 可以求出指针指向的字符串长度

对于声明了大小但是没有赋值的数组,strlen返回0,sizeof返回数组的大小。

#include <string.h>
#include <cstdio>

int main(int argc, char* argv[]){
    char szServerAddr[256];
    size_t len1 = strlen(szServerAddr);
    size_t len2 = sizeof(szServerAddr);
    printf("len1=%d,len2=%d",len1,len2);   //打印结果0,256
    return 0;
}

字符串比较

判断字符串是否为空

https://blog.csdn.net/u012983289/article/details/120044045

1、通过判断它的第一个字符是否为空(推荐用这种:原因是判断速度更快)


char* p = "123456";
if(p != nullptr && p[0] == '\0')
{
    //为空
}
else if(p == nullptr)
{

}
else
{
    //不为空
}

2、通过判断指针或数组的长度

const char* p = "123456";
if(p != nullptr && strlen(p) == 0)
{
    //为空
}
else if(p == nullptr)
{

}
else
{
    //不为空
}

字符串清空

char *p = '\0';

查找字符(字符串包含)

字符串类型转换

字符串切割

https://blog.csdn.net/RNGuzi/article/details/118426947

  • 截取两个子串中间的子串
    方法1:
#include <stdio.h>
#include <string.h>

char* get_substring_between(const char* str, const char* start, const char* end) {
    char* start_pos = strstr(str, start);
    if (!start_pos) {
        return NULL;
    }
    start_pos += strlen(start);

    char* end_pos = strstr(start_pos, end);
    if (!end_pos) {
        return NULL;
    }

    size_t length = end_pos - start_pos;
    char* result = (char*)malloc(length + 1);
    memcpy(result, start_pos, length);
    result[length] = '\0'; // 添加字符串结束标记
    return result;
}

int main() {
    const char* str = "This is a sample string between two substrings";
    const char* between_start = "between";
    const char* between_end = "substrings";

    char* result = get_substring_between(str, between_start, between_end);
    if (result) {
        printf("Extracted substring: '%s'\n", result);
        free(result); // 释放动态分配的内存
    } else {
        printf("Substring not found.\n");
    }

    return 0;
}

方法2:

// 截取字符串,截取两个子串中间的字符串
char g_str[400];
char* InterceptString (char *str, char *left_str, char *right_str)
{
    char *l_str = strstr(str, left_str);
    int r_str = strcspn(l_str, right_str);
    int l_len = strlen(left_str);
    int str_len = r_str - l_len;

    strncpy(g_str, l_str+l_len, str_len);
    g_str[str_len+1] = '\0';

    return g_str;
}

// 截取字符串的信号强度
    char at[] = "AT+CSQ\r\n\r\n+CSQ: 18,99\r\n\r\nOK\r\n";
    char *dd;
    dd = InterceptString (at, "+CSQ: ",",99");
    USART_printf(&huart1,"dd=%s\r\n",dd);//将串口2接收到的数据发送到串口1
    memset(g_str, 0, sizeof(g_str));  // 清空字符串

0 条评论

发表回复

您的电子邮箱地址不会被公开。