最近对于C语言接收到的数据(字符串)处理比较多。
字符串:零个或多个字符组成的有限序列。假设:S="abcd1234efghmn",其中S是串口,字符串中的字符可以是字符、数字或其他字符。
#include <string.h>
#include <stdio.h>
C ANSI 对于C的操作有
复制字符串
char *strcpy(char* dest, const char *src);//把从str地址开始包含有NULL(\0)结束符的字符串复制到dest开始的地址空间
char* strncpy(char* dest,char *src,size_t n); //把从str地址开始前n个字符(不含NULL)字符(n<sizeof(src)
字符串长度
unsigned int strlen(char *s); //计算给定字符串的长度,不包括'\0'在内。
从字符串中查找指定字符
char *strchr(const char *s,char c); 字符串s中首次出现字符c的地址---正向
char *strrchr(const char *str, char c);字符串s中首次出现字符c的地址---反向
从字符串中查找子串
char
*
strstr
(
char
*str1,
const
char
*str2);//若str2是str1的子串,则返回str2在str1的首次出现的地址;如果str2不是str1的子串,则返回NULL。
附加子串到目标字符串
char *strcat(char *dest, const char *src);
char * strcat(char *dest, const char *str,size_t n);
比较字符串
int strcmp(const char *s1, const char *s2);
字符串到数值类型的转换
int atoi(const char *nptr); //字符串转换成整数
double atof(const char *nptr);//字符串转换成浮点数
long atof(const char *nptr); //字符串转换成长整数
double strtod(const char *nptr, char **endptr); //将字符串装换成浮点数,会扫描参数nptr字符串,跳过前面的空格字符,直到遇到数字或正负符号才开始做转换,到出现非数字或字符串结束时('\0')才结束转换,并将结果返回。
举个栗子:
{
char buf[] = "http://www.fangle.com/postedit/emmidt:80"
char PA=NULL;
char PB=NULL;
char PC=NULL;
int port = 0;
char host[128] = {0};
PA = buf;
if(!strncmp(PA,"http://",strlen("http://")))
PA = buf+strlen("http://");
PB = strchr(PA,':');
if(PB)
port = *atoi(PB+1);
else
prot = 80;
memcpy(host, PA, strlen(PA)-strlen(PB));
host[ strlen(PA)-strlen(PB)] = ‘\0’;
}
对比strcpy和memcpy
函数void * memcpy(const void *dest, const void *src, size_t size)
将src指向内存块的数据拷贝size个数据到dest指向的内存块.
即memcpy对于需要复制的内容没有限制,因此用途更广——一般内存的复制
char *strcpy(char * dest, const char *src) 实现src到dest的复制 遇到/0结束。