十字符函数和字符串函数(看这一篇就够用啦)

Posted I am Supreme

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了十字符函数和字符串函数(看这一篇就够用啦)相关的知识,希望对你有一定的参考价值。

目录

strlen:求字符串长度

strcpy:把从src地址开始且含有NULL结束符的字符串复制到以dest开始的地址空间。

strcat:将参数dest字符串和参数src字符串拼接起来

strcmp:将两个字符串进行比较。

strncp:把src所指向的字符串中以src地址开始的前n个字节复制到dest所指的数组中,并返回被复制后的dest。

strncat:把src所指字符串的前n个字符添加到dest所指字符串的结尾处,并覆盖dest所指字符串结尾的'\\0',从而实现字符串的连接。

strncmp:用来比较s1和s2字符串的前n个字符。

字符串查找

strstr:strstr返回一个指针,指向string2在string1中首次出现的位置

内存操作函数

memmove:由src所指内存区域复制num个字节到dest所指内存区域.

memset:将s中当前位置后面的n个字节 (typedef unsigned int size_t )用 c 替换并返回 s 。

memcmp: 比较ptr1和ptr2指针开始的num个字节。


strlen:求字符串长度

size_t strlen ( const char * str );
  •  字符串已经 '\\0' 作为结束标志,strlen函数返回的是在字符串中 '\\0' 前面出现的字符个数(不包含 '\\0' )。
  • 参数指向的字符串必须要以 '\\0' 结束。
  • 注意函数的返回值为size_t,是无符号的( 易错 )
#include <stdio.h>
int main()

    const char*str1 = "abcdef";
    const char*str2 = "bbb";
    if(strlen(str2)-strlen(str1)>0)
    
        printf("str2>str1\\n");
    
    else
    
        printf("srt1>str2\\n");
    
    return 0;

strcpy:把从src地址开始且含有NULL结束符的字符串复制到以dest开始的地址空间。

 char* strapy(char * destination,const char * source);

  •  源字符串必须以 '\\0' 结束。
  • 会将源字符串中的 '\\0' 拷贝到目标空间。
  • 目标空间必须足够大,以确保能存放源字符串。
  • 目标空间必须足够大。

strcat:将参数dest字符串和参数src字符串拼接起来

char * stract ( char destination, const char * source);
  •  源字符串必须以 '\\0' 结束。
  • 目标空间必须足够大,能容纳下源字符串的内容。
  • 目标空间必须可修改。

strcmp:将两个字符串进行比较。

int strcmp(const char * str1 ,const char * str2);
  •  第一个字符串大于第二个字符串,则返回大于0的数字
  • 第一个字符串等于第二个字符串,则返回0
  • 第一个字符串小于第二个字符串,则返回小于0的数字

strncp:把src所指向的字符串中以src地址开始的前n个字节复制到dest所指的数组中,并返回被复制后的dest。

char * strncpy( char * destination,const char *source,size_t num);
  •  拷贝num个字符从源字符串到目标空间。
  • 如果源字符串的长度小于num,拷贝完源字符串后,早目标的后边追加0,直到num个。

strncat:把src所指字符串的前n个字符添加到dest所指字符串的结尾处,并覆盖dest所指字符串结尾的'\\0',从而实现字符串的连接。

char * strncat ( char * destination,const char * source,size_t num);
  • dest要有足够的空间来容纳要拷贝的字符串
  • strncat会将dest字符串最后的’\\0’覆盖掉,字符追加完成后,再追加’\\0’

strncmp:用来比较s1和s2字符串的前n个字符。

int strncmp(const char * str1,const char * str2,size_t num)
  •  比较到出现两个字符不一样或者一个字符串结束,或者num个字符全部比较完。
  •  第一个字符串小于第二个字符串,则返回小于0的数字
  • 第一个字符串等于第二个字符串,则返回0
  • 第一个字符串大于第二个字符串,则返回小大于0的数字

字符串查找

strstr:strstr返回一个指针,指向string2在string1中首次出现的位置

char * strstr(const char *,const char *);
  •  返回一个指针,指向str1中str2的第一个元素
  • 如果str2不在str1中,则返回一个空指针。

内存操作函数

memcpy:从源source所指的内存地址的起始位置开始拷贝n个字节到目标destin所指的内存地址的起始位置中.

void * memcpy( void * destination,const void * source,size_t num);
#include<stdio.h>
#include<string.h>

struct 
	char name[40];
	int age;
 person, person_copy;

int main()


	//memcpy example

	char myname[] = "Pierre de Fermat";
	/* using memcpy to copy string: */
	memcpy(person.name, myname, strlen(myname) + 1);
	person.age = 46;
	/* using memcpy to copy structure: */
	memcpy(&person_copy, &person, sizeof(person));
	printf("person_copy: %s, %d \\n", person_copy.name, person_copy.age);
	return 0;

 

  •  函数memcpy从source的位置开始向后复制num个字节的数据到destination的内存位置。
  • 这个函数在遇到 '\\0' 的时候并不会停下来。
  • 如果source和destination有任何的重叠,复制的结果都是未定义的。

memmove:由src所指内存区域复制num个字节到dest所指内存区域.

void memmove (void * destination,const void * source,size_t num);
  •  和memcpy的差别就是memmove函数处理的源内存块和目标内存块是可以重叠的。
  • 如果源空间和目标空间出现重叠,就得使用memmove函数处理。
#include<stdio.h>
#include<string.h>

int main()

	char str[] = "memmove can be very useful......";
	memmove(str + 20, str + 15, 11);
	puts(str);
	return 0;

 

memset:将s中当前位置后面的n个字节 (typedef unsigned int size_t )用 c 替换并返回 s 。

void * memset(void *s, int c, size_t n); 
  • s指向要填充的内存块。
  • c是要被设置的值。
  • n是要被设置该值的字符数。
  • 返回类型是一个指向存储区s的指针。

memcmp: 比较ptr1和ptr2指针开始的num个字节。

int memcmp(const void * ptr1,const void * ptr2,size_t num)
  •  第一个字符串小于第二个字符串,则返回小于0的数字
  • 第一个字符串等于第二个字符串,则返回0
  • 第一个字符串大于第二个字符串,则返回小大于0的数字
#include<stdio.h>
#include<string.h>


int main()


	char buffer1[] = "DWgaOtP12df0";
	char buffer2[] = "DWGAOTP12DF0";
	int n;
	n = memcmp(buffer1, buffer2, sizeof(buffer1));
	if (n > 0) printf("'%s' is greater than '%s'.\\n", buffer1, buffer2);
	else if (n < 0) printf("'%s' is less than '%s'.\\n", buffer1, buffer2);
	else printf("'%s' is the same as '%s'.\\n", buffer1, buffer2);
	return 0;

 

以上是关于十字符函数和字符串函数(看这一篇就够用啦)的主要内容,如果未能解决你的问题,请参考以下文章

关于序列化和反序列化案例看这一篇就够用了,简直讲的清新脱俗!

Kotlin的构造函数看这一篇就够了

Kotlin的构造函数看这一篇就够了

java8之lambda表达式看这一篇就够了

Python 函数式编程,看这一篇就够了!

Python 函数式编程,看这一篇就够了!