嵌入式Linux C(六)——字符串

简介: 嵌入式Linux C(六)——字符串

一、前言


字符串就是首字符的地址


char *ptr = "hello world";//保存在数据段的or段,改数据不能被修改(常量字符串,不能被修改)
char src[100] = "hello world";//保存在栈
char *str = (char *) malloc(sizeof(char) * 100);//保存在堆
strcpy(str,"hello world");


二、字符串函数


2.1 strlen字符串长度函数


char *ptr = "hello world";

char src[100] = "hello world";
char *str = (char *) malloc(sizeof(char) * 100);
if(NULL == str)
{
  printf("malloc error!");
  exit(1);
}
size_t len = strlen(src);//返回是长整型
printf("%ld",len);
//实现
size_t my_strlen(const char *s)
{
  size_t len = 0;
  whlie(*s != '\0')
  {
  len++;
  s++;
  }
  return len;
}


2.2 strcpy、strncpy字符串拷贝函数


char src[100] = "hello world";
char *dest = (char *) malloc(sizeof(char) * 100);
if(NULL == dest)
{
  printf("malloc error!\n");
  exit(1);
}
char *temp = strcpy(dest,src);//返回dest的首字符地址
//存在风险,无法确定dest是否大于src。
//微软推荐strcpy_s(char *dest,int len,char *src)len就是dest的长度
if(NULL == temp)//相对于my_strcpy而言
{
  printf("my strcpy is error!\n");
  exit(1);
}
//实现my_strcpy
char *my_strcpy(char *dest,char *src)
{
  if(NULL  == dest || NULL == src)
  {
  return NULL;
  }
  char *temp = dest;//需要有个temp进行移动
  whlie(*src != '\0')
  {
  *temp = *src;
  src++;
  temp++;
  }
  *dest = '\0';
  return dest;
}
//my_str_strncpy
char *my_strncpy(char *dest,char *src,size_t n)
{
  if(NULL  == dest || NULL == src)
  {
  return NULL;
  }
  int i;
  char *temp = dest;
  for(i = 0; (i < n) && (*src != '\0'); i++)
  {
  *temp = *src
  src++;
  temp++;
  }
  for(;i < n;i++)
  {
  *temp = '\0';
  temp++;
  }
  return dest;
}


2.3 strcat、strncat字符串链接函数


dest还是有风险


//实现my_strcat
char *my_strcat(char *dest,char *src)
{
  if(NULL  == dest || NULL == src)
  {
  return NULL;
  }
  char *temp = dest;
  while(*temp != '\0')
  {
  temp++;
  }
  while(*src != '\0')
  {
  *temp = *src;
  temp++;
  src++;
  }
  *temp = '\0';
  return dest;
}
//实现my_strcat
char *my_strncat(char *dest,char *src,size_t n)
{
  if(NULL  == dest || NULL == src)
  {
  return NULL;
  }
  char *temp = dest;
  while(*temp != '\0')
  {
  temp++;
  }
  for(int i = 0; (i < n) && (*src != '\0'); i++)
  {
  *temp = *src;
  temp++;
  src++;
  }
  *temp = '\0';
  return dest;
}


2.4 strcmp、strncmp字符串比较函数


//实现
int my_strcmp(char *s1,char *s2)
{
  if(NULL == s1 && NULL != s2)
  {
  return -1;
  }
  if(NULL != s1 && NULL == s2)
  {
  return 1;
  }
  if(NULL == s1 && NULL == s2)
  {
  return 0;
  }
  while(*s1 != '\0' &&)
  {
  if(*s1 > *s2)
  {
    return 1;
  }
  if(*s1 < *s2)
  {
    return 0;
  }
  s1++;
  s2++;
  }
  if(*s1 == '\0' && *s2 == '\0')
  {
  return 0;
  }
  if(*s1 != '\0' && *s2 == '\0')
  {
  return 1;
  }
  if(*s1 == '\0' && *s2 != '\0')
  {
  return -1;
  }
  return 0;
}


//实现strncmp
int my_strncmp(char *s1,char *s2,size_n)
{
  if(NULL == s1 || s2 == NULL)
  {
  return -1;
  }
  for(int i = 0; (i < n) && ((s1[i] != '\0') && (s2 != '\0')); i++)
  {
  if(s1[i] != s2[i])
  {
    return -1;
  }
  }
  return 0;
}


2.5 strchr、strrchr、strpbrk字符串函数


stecasecmp 忽略大小写比较字符串

strchr 查找字符串中第一个出现的指定字符

strrchr 查找字符串中最后一个出现的指定字符

strpbrk 查找字符串中第一个出现的指定字符


补充


strspn


返回字符串中连续不含指定字符串内容的字符数


统计s1中任意一个字符不在s2中出现的字符小标

字典


strstr


在一字符串查找指定的字符串


strtok


分割字符串


0a2653c851af460fa595bd959398a8f1.png


strcpy //不安全,容易越界访问,只支持字符串拷贝,不支持其他类型

memcpy 拷贝任意类型

memset 清零

bzero 清空

atoi 字符串变整型数字


编程练习


题目:在字符串中寻找特定字符串

题目:实现strtok

相关文章
|
16天前
|
JSON 机器人 Linux
推荐一款嵌入式Linux开源框架与封装-cpp-tbox
推荐一款嵌入式Linux开源框架与封装-cpp-tbox
48 3
|
1月前
|
Linux 开发工具 git
Linux嵌入式系统中如何使用U-Boot实例
Linux嵌入式系统中如何使用U-Boot实例
26 0
|
28天前
|
Shell Linux C语言
【Shell 命令集合 文档编辑 】Linux 递归搜索指定字符串 rgrep命令使用指南
【Shell 命令集合 文档编辑 】Linux 递归搜索指定字符串 rgrep命令使用指南
14 0
|
28天前
|
Shell Linux C语言
【Shell 命令集合 文档编辑】Linux 在文件中查找指定的字符串 fgrep命令使用指南
【Shell 命令集合 文档编辑】Linux 在文件中查找指定的字符串 fgrep命令使用指南
34 2
|
4天前
|
Linux 编译器 测试技术
嵌入式 Linux 下的 LVGL 移植
嵌入式 Linux 下的 LVGL 移植
|
17天前
|
Linux
嵌入式Linux系统(NUC980)tf卡出错处理errors=remount-ro改为errors=continue
嵌入式Linux系统(NUC980)tf卡出错处理errors=remount-ro改为errors=continue
7 1
|
17天前
|
安全 Linux
嵌入式Linux系统关闭串口调试信息的输出
嵌入式Linux系统关闭串口调试信息的输出
13 1
|
17天前
|
Linux 编译器 网络安全
嵌入式Linux移植dropbear
嵌入式Linux移植dropbear
16 3
|
17天前
|
存储 Ubuntu Linux
制作一个嵌入式Linux的应用程序升级文件
制作一个嵌入式Linux的应用程序升级文件
12 2
|
17天前
|
传感器 Linux API
嵌入式Linux串口编程简介
嵌入式Linux串口编程简介
15 1