上篇对嵌入式中C语言基本数据类型,关键字和常用操作进行了汇总,这篇我们将侧重字符串操作。请看下面的字符串处理函数:
    a.库函数
    1)将字符串src拷贝到字符数组dest内
        char *strcpy(char *dest, const char *src);
        dest 要输入的字符数组名,内存的地址
        src 要复制的字符数组名,内存地址

 /*************************************************************************
> File Name: strcpy_test.c
> Author: shuk
> Mail: wsksec@gmail.com
> Created Time: Fri 31 Jul 2015 04:29:07 PM CST
************************************************************************/ #include <stdio.h>
#include <string.h> int main(void)
{
char str[]="asdfjkladfeifdfjkjfljfljlasjf";
char dest[BUFSIZ]="";
char ch[] = "ab";
strcpy(dest,str);
printf("dest = %s\n",dest);
printf("sizeof(ch) = %ld\n",sizeof(ch));//include \0
return ;
}

2)求字符串长度
        size_t strlen(const char *s);
        字符串长度:是'\0'前面的字母个数,不包含'\0'
        s 要计算长度的字符串,或存字符串内存的地址

 /*************************************************************************
> File Name: strlen_test.c
> Author: shuk
> Mail: wsksec@gmail.com
> Created Time: Fri 31 Jul 2015 06:35:25 PM CST
************************************************************************/ #include <stdio.h>
#include <string.h> int main(void)
{
char str[] = "qwertyuasdfgj";
int len;
len = strlen(str);
printf("strlen(str) = %d,%s\n",len,str);//not inlcude \0
return ;
}

3)比较字符串的大小
        int strcmp(const char *s1, const char *s2);
        s1,s2,是两个要比较的字符串
        返回的值 <0 代表s1小,=0 相等 >0 s1大

 /*************************************************************************
> File Name: strcmp_test.c
> Author: shuk
> Mail: wsksec@gmail.com
> Created Time: Fri 31 Jul 2015 06:58:19 PM CST
************************************************************************/ #include <stdio.h>
#include <string.h> int main(void)
{
char *str = "adfndfkkf";
char *dest = "acdffgf"; if(strcmp(dest,str) == )
{
printf("str == dest\n");
}
else if(strcmp(dest,str) < )
{
printf("dest < str\n");
}
else
{
printf("dest > str\n");
} return ;
}

4)字符串拼接
        char *strcat(char *dest, const char *src);
        dest 目标的地址,目标的字符数组
        src 源地址,是将src字符串连接在dest字符串后面

 /*************************************************************************
> File Name: strcat_test.c
> Author: shuk
> Mail: wsksec@gmail.com
> Created Time: Fri 31 Jul 2015 07:14:01 PM CST
************************************************************************/ #include <stdio.h>
#include <string.h> int main(void)
{
char *str = "abcdefg";
char dest[BUFSIZ] = "higklmn"; printf("strlen(str) == %d\n",strlen(str));
printf("strlen(dest) == %d\n",strlen(dest));
strcat(dest,str);
printf("String cating. . .\n");
sleep();
printf("dest == %s\n",dest);
printf("strlen(dest) == %d\n",strlen(dest));
printf("sizeof(dest) == %d\n",sizeof(dest));
return ;
}

5)在字符串中查找另一个字符串
        char *strstr(const char *haystack, const char *needle);
        haystack 一个字符串
        needle 要寻找字符串,在haystack里面查找needle这个字符串
        返回值,是在haystack内找到的字符串的地址或者说,是找到的字符数组

 /*************************************************************************
> File Name: strstr_test.c
> Author: shuk
> Mail: wsksec@gmail.com
> Created Time: Fri 31 Jul 2015 07:32:36 PM CST
************************************************************************/ #include <stdio.h>
#include <string.h> int main(void)
{
char *haystack = "abcdadecdakllgd";
char *needle = "b";
char *temp; temp = strstr(haystack,needle);
printf("temp == %s\n",temp);
return ;
}

6)从键盘上获取字符串
        char *gets(char *s);
        s 准备好的字符数组,或内存地址
  见 7)demo
    7)将字符串输出到屏幕
        int puts(const char *s);
        s 是要输出的字符数组,或内存地址

 /*************************************************************************
> File Name: gets_test.c
> Author: shuk
> Mail: wsksec@gmail.com
> Created Time: Fri 31 Jul 2015 07:50:02 PM CST
************************************************************************/ #include <stdio.h>
#include <string.h> int main(void)
{
char str[] = ""; gets(str);
// printf("str == %s\n",str);
puts(str);
return ;
}

8)将字符串按格式写入到内存,或字符数组内
        sprintf(char *str,"格式字符串",参数列表....);
        str 是准备好的字符数组
        格式字符串 由%c %d %lf %f %u等组成的字符串
        char str1[256]="";
        int a=102;
        sprintf(str1,"a=%d, &a=%p, ASCII = %c\n",a,&a,a);
        puts(str1);
        用途:将数值转换为字符串

 /*************************************************************************
> File Name: sprint_test.c
> Author: shuk
> Mail: wsksec@gmail.com
> Created Time: Fri 31 Jul 2015 09:16:36 PM CST
************************************************************************/ #include <stdio.h> int main(void)
{
char str[] = "";
int a = ; sprintf(str,"a = %d,&a = %p,ascii = %c",a,&a,a);
// printf("str = %s\n",str);
puts(str);
return ;
}

9)把字符串转换为整数
        #include <stdlib.h>
        int atoi(const char *nptr); 把字符串转换为整型
        long atol(const char *nptr); 转换为长整型
        double atof(const char *nptr);转换为浮点

 /*************************************************************************
> File Name: atoi_test.c
> Author: shuk
> Mail: wsksec@gmail.com
> Created Time: Fri 31 Jul 2015 09:29:20 PM CST
************************************************************************/ #include <stdio.h>
#include <string.h>
#include <stdlib.h> int main(void)
{
char *str = ""; //if str[] = "abc",after atoi,temp == 0
int temp; temp = atoi(str);
printf("temp == %d\n",temp);
return ;
}

b.自定义的字符串处理函数

当涉及到对字符串操作是,一定要记得这几点:
        a)若要存储字符串,声明的变量必须指定空间大小,必要是要对其初始化。如 char [256] = "";char *str = "abdefg";
        b)操作函数中的参数要用 const 关键子限定,防止外部对存储空间地址进行修改;
    1)strcpy_me

 /*************************************************************************
> File Name: strcpy_me.c
> Author: shuk
> Mail: wsksec@gmail.com
> Created Time: Sat 01 Aug 2015 03:00:08 PM CST
************************************************************************/ #include <stdio.h>
#include <string.h> char *fun_cpy(char *,const char *); int main(void)
{
char *str = "abcdefghikjlmnopqrstuswxyz";
char dest[] = "";
dest[] = 'v'; fun_cpy(dest,str);
printf("dest:%s\n",dest);
printf("str :%s\n",str);
return ;
} char *fun_cpy(char *dest,const char *str)
{
int i = ;
while(*(str + i) != '\0')
{
*(dest++) = *(str + i);
i++;
}
*dest = '\0';
return dest;
}

2)strlen_me

 /*************************************************************************
> File Name: strlen_me.c
> Author: shuk
> Mail: wsksec@gmail.com
> Created Time: Sat 01 Aug 2015 03:26:22 PM CST
************************************************************************/ #include <stdio.h>
#include <string.h> int my_strlen(const char *); int main(void)
{
char *str = "abcdefg";
int val; val = my_strlen(str);
printf("val == %d\n",val);
return ;
} int my_strlen(const char *s)
{
int i = ; while(*(s+i) != '\0')
{
i++;
}
return i;
}

3)strcat_me

 /*************************************************************************
> File Name: strcat_me.c
> Author: shuk
> Mail: wsksec@gmail.com
> Created Time: Sat 01 Aug 2015 04:00:37 PM CST
************************************************************************/ #include <stdio.h>
#include <string.h> void my_strcat(char *,const char *); int main(void)
{
char *str = "abcdefg";
char dest[] = "higklmnl"; my_strcat(dest,str);
printf("str:%s\n",str);
printf("dest:%s\n",dest);
return ;
} void my_strcat(char *dest,const char *str)
{
int i; while(*dest++)
;
dest -= ;
while(*(str+i) != '\0')
{
*dest++ = *(str+i);
i++;
}
*dest = '\0';
}

4)strcmp_me

 /*************************************************************************
> File Name: strcmp_me.c
> Author: shuk
> Mail: wsksec@gmail.com
> Created Time: Sat 01 Aug 2015 04:12:51 PM CST
************************************************************************/ #include <stdio.h>
#include <string.h> int my_strcmp(const char *,const char *); int main(void)
{
char *str = "abcdefgbra";
char *dest = "abcdefgbaa";
int i; i = my_strcmp(dest,str);
if(i > )
{
printf("dest > str\n");
}
else if(i < )
{
printf("dest < str\n");
}
else
{
printf("dest = str\n");
} return ;
} int my_strcmp(const char *dest,const char *str)
{
int i = ; while()
{
if((*(dest + i) == *(str + i)) && (*(dest + i)!='\0'))
{
i++;
}
else if(*(dest + i) > *(str + i))
{
return ;
}
else if(*(dest + i) < *(str + i))
{
return -;
}
else
{
return ;
}
}
}

  细节不足的地方请您指教,后续我也会加以说明和修改。

C语言面试题(二)的更多相关文章

  1. 转 C语言面试题大汇总

    转 C语言面试题大汇总,个人觉得还是比较全地!!! \主 题:   C语言面试题大汇总,个人觉得还是比较全地!!!  作 者:   free131 (白日?做梦!)   信 誉 值:   100    ...

  2. 嵌入式开发—C语言面试题

    嵌入式开发—C语言面试题 源地址:http://blog.csdn.net/xdx2ct1314/article/details/7358929   1. 用预处理指令#define 声明一个常数,用 ...

  3. C语言面试题汇总之一

    C语言面试题汇总之一 1.static有什么用途?(请至少说明两种) l 限制变量的作用域: 设置变量的存储域. 2.引用和指针有什么区别? 引用必须被初始化,指针不必: 引用初始化以后不能被改变,指 ...

  4. 12个有趣的C语言面试题

    摘要:12个C语言面试题,涉及指针.进程.运算.结构体.函数.内存,看看你能做出几个! 1.gets()函数 问:请找出下面代码里的问题: #include<stdio.h> int ma ...

  5. c语言面试题之sizeof

    c语言面试题之sizeof */--> c语言面试题之sizeof Table of Contents 1. sizeof 1 sizeof sizeof是c语言中判断数据类型或者表达式的长度符 ...

  6. C语言面试题(嵌入式开发方向,附答案及点评)

    整理自C语言面试题(嵌入式开发方向,附答案及点评) 预处理器(Preprocessor) 1. 用预处理指令#define 声明一个常数,用以表明1年中有多少秒(忽略闰年问题) #define SEC ...

  7. Java语言基础(二) Java关键字

    Java语言基础(二) Java关键字 Java关键字比较多,我就不列举出来了,只记录一些常用的小知识点: ①Java的关键字只有小写. ②then.sizeof都不是Java的关键字,熟悉C++的程 ...

  8. Java语言基础(二)

    Java语言基础(二) 一.变量续 (1).变量有明确的类型 (2).变量必须有声明,初始化以后才能使用 (3).变量有作用域,离开作用域后自动回收 变量作用域在块内有效 (4).在同一定义域中变量不 ...

  9. Go语言基础(二)

    Go语言基础(二) 跟着上篇,继续看Go基础 一.变量作用域 与C类似,有全局变量.局部变量.形参之分 package main import "fmt" // 全局变量 var ...

  10. 数据库基础SQL知识面试题二

    数据库基础SQL知识面试题二 作者:尹正杰  版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.选课系统SQL语法练习 course数据库中有以下四张表: •students表(学生表): si ...

随机推荐

  1. Android课程---帧布局 FrameLayout

    帧布局的特点是: 1.多个组件,层叠显示 2.所占位置和大小由组件决定 示例代码: <?xml version="1.0" encoding="utf-8" ...

  2. 【iCore3 双核心板】例程二十九:SD_IAP_FPGA实验——更新升级FPGA

    实验指导书及代码包下载: http://pan.baidu.com/s/1o7h158m iCore3 购买链接: https://item.taobao.com/item.htm?id=524229 ...

  3. 安装Arch Linux(桌面环境)

    安装xorg-server # pacman -S xorg-server xorg-server-utils xorg-xinit 安装显卡驱动 如果不知道是什么显卡,就使用以下命令查看 # lsp ...

  4. 20145221高其&20145326蔡馨熠《信息安全系统设计基础》实验二 固件设计

    20145221高其&20145326蔡馨熠<信息安全系统设计基础>实验二 固件设计 实验目的与要求 了解多线程程序设计的基本原理,学习 pthread 库函数的使用. 了解在 l ...

  5. JMeter之JDBC接口测试

    使用jmeter连接数据库后,即可在jmeter中构造对数据库进行增删改查的请求以对数据库进行测试,以下以mysql数据库为例,演示jmeter连接mysql并进程查询操作的步骤. 1.确保mysql ...

  6. php7安装及配置

    一.下载php-7.0.5http://cn2.php.net/distributions/php-7.0.5.tar.gz 二.解压安装:# tar zxvf php-7.0.5.tar.gz# c ...

  7. chomre常用快捷键

    Ctrl+T                                打开新标签页. 按住 Ctrl 键的同时点击链接.或用鼠标中键(或鼠标滚轮)点击链接.    从后台在新标签页中打开链接. ...

  8. MVC传递Model

    @using System.Configuration;@using System.Text.RegularExpressions;@model Model.NewInfo  // 指定Module的 ...

  9. 【C51】UART串口通信

    我们常需要单片机和其他模块进行通信,数据传输,常用的方式就是串口通信技术. 常用来 单片机<-->电脑,  单片机<-->单片机之间通信. 串行通信 versus 并行通信 并 ...

  10. Web性能API——帮你分析Web前端性能

    前端性能统计必备api,有不知道的吗? 正文从这开始- 开发一个现代化的互联网网站是一项复杂的任务,需要各种职能的密切合作以应对用户日新月异的需求.其中,网页的性能直接决定了用户的体验,而随着新型客户 ...