字符串常用函数及操作 [待补充]

目录

strcpy

strlen

关键字 sizeof

memmove

去掉字符串左右两端的空格

strcpy

char * strcpy( char * dst, const char * src );
  • strcpy是一种C语言的标准库函数,strcpy把从src地址开始且含有’\0’结束符的字符串复制到以dest开始的地址空间,返回值的类型为char*。
  • 返回值:目标串的地址。
char* strcpy(char* des,const char* source)
{
	char* r=des;  
	assert((des != NULL) && (source != NULL));
	while((*r++ = *source++)!='\0');
	return des; 
}

strlen

  • strlen 是一个函数,它用来计算指定字符串 str 的长度,但不包括结束字符(即 null 字符)
size_t strlen(char const* str);
  • 需要特别注意的是,函数 strlen 返回的是一个类型为 size_t 的值.
/*判断一*/
if(strlen(x)>= strlen(y))
{
}
/*判断二*/
if(strlen(x)- strlen(y)>= 0)   //相减返回值是size_t
{
    
    
  • 表面上看,上面的两个判断表达式完全相等,但实际情况并非如此。其中,判断表达式一没什么问题,程序也能够完全按照预想的那样工作;但判断表达式二的结果就不一样了,它将永远是真
  • 函数 strlen 的返回结果是 size_t 类型(即无符号整型),而 size_t 类型绝不可能是负的,语句“if(strlen(x)-strlen(y)>=0)”将永远为真。
  • 表达式中同时包含了有符号整数和无符号整数,还是有可能产生意想不到的结果
/*判断一*/
if(strlen(x)>= 5)
{
}
/*判断二*/
if(strlen(x)- 5>=0)
{
}
  • 判断表达式二的结果还是永远是真,其原因与上面相同

关键字 sizeof

  • 关键字 sizeof 是一个单目运算符,而不是一个函数。与函数 strlen 不同,它的参数可以是数组、指针、类型、对象、函数等,如下面的示例代码所示:
har sArr[] = "ILOVEC";
/*用sizeof求长度*/
printf("sArr的长度=%d\n", sizeof(sArr));
  • 相对于函数 strlen,这里的示例代码运行结果为 7(因为它包括结束字符 null)。
  • 同时,对 sizeof 而言,因为缓冲区已经用已知字符串进行了初始化,其长度是固定的,所以 sizeof 在编译时计算缓冲区的长度。
  • 也正是由于在编译时计算,因此 sizeof 不能用来返回动态分配的内存空间的大小。

memmove

void *memmove(void *dest, const void *src, unsigned int count);

去掉字符串左右两端的空格

  • 截取字符串尾部空格
void Rtrim(char *string)   
{   
	size_t len = 0;   
	if(string == NULL)   
		return;   

	len = strlen(string);
	while(len > 0 && string[len-1] == ' ')   //位置换一下   
		string[--len] = 0;   
	return;   
}
  • 截取字符串首部空格
void Ltrim(char *string)
{
	size_t len = 0;
	len = strlen(string);   
	char *p_tmp = string;

	//不是以空格开头
	if( (*p_tmp) != ' ') 
		return;
	
	//找第一个不为空格的
	while((*p_tmp) != '\0')
	{
		if( (*p_tmp) == ' ')
			p_tmp++;
		else
			break;
	}

	//全是空格(从上面已经遍历到最后一个,指针仍然指向空格,则字符串全为空)
	if((*p_tmp) == '\0') 
	{
		*string = '\0';
		return;
	}

	//不全是空格(p_tmp2指向字符串头部,两个指针,将p_tmp指向的非空区域拷贝到前面去)
	//也可以考虑使用memmove(p_tmp2,p_tmp,ncount); ncount可以通过 len - (p_tmp - p_tmp2) 得出
	char *p_tmp2 = string; 
	while((*p_tmp) != '\0')
	{
		(*p_tmp2) = (*p_tmp);
		p_tmp++;
		p_tmp2++;
	}
	(*p_tmp2) = '\0';
    return;
}

猜你喜欢

转载自blog.csdn.net/baidu_41388533/article/details/114850398