s开头函数大全:https://blog.csdn.net/u012855229/article/details/130451883
目录
字符串拷贝
-
strdup
对malloc的封装,需要手动释放变量。
https://www.cnblogs.com/yinguojin/p/10195700.html -
strlcpy
https://blog.csdn.net/qq_45673733/article/details/132170560
字符串拼接
- strcat和strncat
https://blog.csdn.net/nyxdsb/article/details/128436439
获取字符串的长度
https://www.jb51.net/article/217872.htm
https://blog.csdn.net/xuechanba/article/details/118862663
- 字符串结束标识'\0'
https://blog.csdn.net/weixin_47641702/article/details/108769458
双引号字符串会在结尾默认加上'\0'
注意:\0如果后面再接数字,可能就是unicode编码,此时的\0与后面的数字为一个整体,不被识别为结束符。
- sizeof与strlen
https://blog.csdn.net/weixin_65245159/article/details/127530579
https://blog.csdn.net/Heck_Jacke/article/details/126136326
比较项 | 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;
}
字符串比较
- strncmp
比较指定长度两个字符串的大小
https://blog.csdn.net/m0_65601072/article/details/123993008
判断字符串是否为空
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';
查找字符(字符串包含)
-
strchr()
是在一个字符串中查找给定字符的第一个匹配之处,并返回指向该字符的指针。如果没有找到该字符,则返回 NULL。
https://blog.csdn.net/u012730525/article/details/136373592 -
strcspn和strspn
https://blog.csdn.net/u013073067/article/details/113008870 -
strstr
https://blog.csdn.net/weixin_69283129/article/details/126071217
返回值:查找子串首次出现的首地址
字符串类型转换
- 字符串转长整型(strtol)
https://blog.csdn.net/m0_60503814/article/details/136542188
字符串切割
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 条评论